[STL] Set 생성, 삽입, 삭제 등 사용법
Notepad96
·2020. 11. 5. 11:59
1. set
set은 특정 기준에 의하여 원소들이 자동 정렬되는 노드 기반 컨테이너이다.
set은 기본적으로 오름차순(less) 정렬이고 greater 조건자를 줌으로써 내림차순으로 정렬할 수도 있다.
set은 유일한 원소만을 갖을 수 있는 구조로서 수학적으로 집합을 의미하는 것을 알 수 있다.
중복된 원소를 갖고자 한다면 multiset을 사용하여야 한다.
또한, 균형 이진 트리로 구현되어 빠른 시간으로 원소를 탐색할 수 있으며 이에 따라 탐색할 수 있도록 여러가지 탐색 함수를 제공해 준다.
2. 코 드
#include <iostream>
#include <set>
using namespace std;
int main() {
/* 생성자 */
set<int> set; // 오름차순, 기본 값 : less<int>
//set<int, greater<int>> set; //내림차순
/* 삽입, 삭제 */
set.insert(30);
set.insert(40);
set.insert(10);
set.insert(20);
set.insert(50);
set.insert(50); // 중복 저장 x
set.erase(20);
for (int i : set) {
cout << i << " ";
}
cout << "\n";
for (auto it = set.begin(); it != set.end(); it++) {
cout << *it << " ";
}
cout << "\n";
/* 값 탐색 */
// 1. 삽입 성공여부 확인
auto it = set.insert(50); // pair< set<int>::iterator, bool >
if (it.second) {
cout << *it.first << "삽입 성공\n";
}
else {
cout << *it.first << "삽입 실패\n";
}
// 2. 개수 탐색. set은 중복이 불가하므로 0 또는 1의 값
cout << "원소 60 개수 : " << set.count(60) << "\n";
// 3. find 함수로 탐색
if (set.find(50) == set.end()) { // find는 존재하지 않으면 set.end()를 리턴
cout << "원소 50은 현재 없다.\n";
}
else {
cout << "원소 50은 현재 존재한다.\n";
}
return 0;
}
- insert 멤버 함수는 이미 존재하는 원소의 값을 삽입하고자하면 실패하여 아무일도 발생하지 않는다.
또한, insert는 pair< set<int>::iterator, bool > 타입을 리턴하여 여기서 second값을 확인하면 이미 원소가 존재하여 삽입이 실패하였는지 아니면 삽입이 성공하였는지의 여부를 확인할 수 있다.
- count 멤버 함수는 원소의 개수를 리턴해주며 set의 경우 유일한 원소만을 갖을 수 있으므로 0 또는 1의 값을 얻을 수 있다.
- find 멤버 함수는 원소가 존재하면 해당 원소의 반복자를 반환해주고, 존재하지 않는다면 컨테이너의 끝 반복자인 end() 반복자를 반환해 준다.
따라서 find의 결과가 end() 반복자라면 해당 원소는 존재하지 않는다는 의미이다.
3. 참 조
'C++ > Container' 카테고리의 다른 글
[STL] Map 생성, 삽입, 삭제 등 사용법 (0) | 2020.11.06 |
---|---|
[STL] Multiset 생성, 삽입, 삭제 등 사용법 (0) | 2020.11.05 |
[STL] List 생성, 삽입, 삭제 등 사용법 (0) | 2020.11.04 |
[STL] Deque 생성, 삽입, 삭제 등 사용법 (0) | 2020.11.04 |
[STL] Vector 생성, 삽입, 삭제 등 사용법 (0) | 2020.11.03 |