1. Set 선언법
set은 순서 있는 집합을 나타낸다. 기본적으로 다음과 같이 선언한다.
std::set<type> s;
set에는 각종 정보가 BST의 형태로 인덱싱되어서 들어간다. 인덱싱을 할 때 비교연산을 수행하므로 operator<를 정의해 주어야 사용할 수 있다.
2. Set에 정보 삽입/삭제
set.insert 메서드는 삽입에 성공하면 set.first에 삽입한 데이터의 이터레이터를, set.second에는 삽입 성공 여부를 리턴한다. 만약 중복 원소를 삽입하려고 시도할 경우 삽입에 실패하고 set.second에 false가 반환되게 된다.
s.insert(data); // set에 데이터 삽입
s.insert(iter, k); // 해당 이터레이터의 위치에서부터 k의 위치를 탐색해서 삽입
s.erase(iter); // set에서 해당 이터레이터에 해당하는 데이터 삭제
s.erase(start, end) // start 이터레이터부터 end 이터레이터까지 모두 삭제
s.clear(); // set에 있는 모든 정보 삭제
3. Set 이터레이터
Set은 기본적으로 set.begin(), set.end() 이터레이터를 제공한다. set은 인덱스기반으로 접근하는 것(at메서드나 []연산자 사용)은 불가능하고 해당 이터레이터를 활용해서만 데이터에 접근할 수 있다.
s.begin();
s.end();
s.rbegin();
s.rend();
4. Set에서 정보 검색
Set에 있는 정보는 find를 통해서 검색할 수 있다. 해당 메서드는 검색한 정보를 발견하면 해당 정보의 이터레이터를 리턴하고, 발견하지 못하면 set.end()를 리턴한다.
s.find(data);
5. Set의 Count 반환
set.count 메서드를 활용해서 해당 데이터의 count를 반환받을 수 있다. set은 중복 원소를 허용하지 않기에 0, 1만 반환된다.
6. multiset
multiset의 경우에도 사용 방법은 크게 다르지 않다. 단지, multiset은 원소의 중복을 허용한다.
7. unordered_set, unordered_multiset
unordered_set과 multiset은 hash map을 활용해서 set을 구현했다고 보면 된다.
8. map, unordered_map
map은 set과 거의 동일하지만 key와 함께 value를 보관한다. 파이썬에서의 딕셔너리 같은 자료구조라고 생각하면 편하다.
1) 값 삽입
예를 들어, 다음과 같이 값을 삽입할 수 있다.
std::map<string, int> m;
m.insert(std::pair<string, int>("one", 1);
m["two"] = 2;
2) 값 읽기
읽을 때도 다음과 같이 읽을 수 있다.
m.at("one");
m["one"];
3) 값 삭제
삭제는 key값을 기준으로 할 수도 있고, Iterator 기반으로 범위 삭제를 진행할 수도 있다. clear메서드도 존재한다.
m.erase("key");
m.erase(m.begin(), m.end());
m.clear();
4) 이터레이터를 활용한 값 접근
이터레이터를 활용해서 정보를 조회할때는 first, second를 활용해서 접근할 수 있다. first가 key, second는 value이다.
m.begin()->first;
m.begin()->second;
'프로그래밍 언어 > C++' 카테고리의 다른 글
STL 알고리즘 - 원소 제거(remove, remove_if) (0) | 2023.02.14 |
---|---|
STL 알고리즘 - 정렬(sort, stable_sort, partial_sort) (0) | 2023.02.14 |
STL 컨테이너 - Deque (0) | 2023.02.14 |
STL 컨테이너 - List (0) | 2023.02.14 |
STL 컨테이터 - Vector (0) | 2023.02.14 |
댓글