C++/study
[c++][STL] map
클디코
2023. 3. 5. 19:00
what is map?
: map은 각 노드가 key와 value 쌍으로 이루어져 있으며,
first- key, second- value의 pair 객체로 저장된다.
O(logn)
1) map 선언
map의 기본 구조는 map <key type, value type>
2) insert / search /delete
- map은 중복을 허용하지 않으므로, key가 중복되면 insert가 수행되지 않는다.
- search는 iterator을 사용하며, 데이터를 찾지 못했을 경우, iterator는 map.end()를 반환한다.
- delete는 erase와 clear를 사용한다.
map<string, int> m;
//insert : 1 (key 값 중복 시 덮어씌우기 x)
m.insert({"Cam", 300});
//insert : 2 일반 배열처럼 삽입가능 (key 값 중복 시 덮어씌우기 O)
m[0]=10; //key : 0 / value : 10
m[5]=23; //key : 5 / value : 23
//search
if (m.find("Alice") != m.end()) {
cout << "find" << endl;
}
else {
cout << "not find" << endl;
}
//delete : 특정 위치
m.erase(m.begin()+2);
//delete : key 값 기준
m.erase("Alice");
//delete : 모든 요소
m.erase(m.begin(), m.end());
//delete : 모든 요소2
m.clear();
3) 데이터 접근 (first, second)
: first, second를 이용한다. iterator을 활용하여 begin()부터 end()까지 찾을 수 있다.
//인덱스기반
for (auto iter = m.begin() ; iter != m.end(); iter++)
{
cout << iter->first << " " << iter->second << endl;
}
cout << endl;
for (auto iter : m) {
cout << iter.first << " " << iter.second << endl;
}
+ map sort
1. 기본 정렬상태 : key값을 기준으로 오름차순 정렬
내림차순으로 정렬 : key값이 int 인 경우 맵 선언 시 gretaer<int> 비교 함수를 넣는다.
2. value값으로 정렬하기 : map의 요소들을 value값을 기준으로 정렬합니다.
1) map을 vector로 이동
2)vector를 second 기준으로 정렬
*참고