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 typevalue 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 기준으로 정렬

 

 

 

 

 

*참고

https://life-with-coding.tistory.com/305