알고리즘/이론

[C++] map(STL)

qqlzzb 2022. 6. 22. 19:10

map은 검색, 삽입, 삭제가 O(logn)인 레드블랙트리로 구현되어 있다.

key 값과 value 값을 가지며, 중복된 값은 제거되고 오름차순으로 정렬된다.

c++에서 사용시, #include <map>을 해줘야 하며, map 헤더파일을 추가하면 중복이 허용되는 mulitmap도 사용할 수 있다.

 

- 선언

map<string,int> m; //key 값의 자료형은 string, value 값의 자료형은 int

기본적으로 key 값인 string 데이터가 오름차순으로 정렬되어 값이 들어가지만, 내림차순으로 정렬하고 싶다면

map<string,int,greater<string>> m;

(하지만 greater<int>라고 한다고 해서 key 값이 아닌 value 값으로 정렬할 수는 없다.)

 

 

- 데이터 삽입

m.insert({"abc",1});

 

- find

map에 특정 값이 존재하는지 확인 후, 있다면 해당 값의 짝꿍인 int 값 증가

map<string,int> m;
string s1;
cin>>s1;
if(m.find(s1)==m.end() //못 찾았다
{
	m.insert({s1,1});
}
else m[s1]++; //찾았으므로 s1의 짝꿍 int의 값을 증가

map에 특정 값이 존재하는지 확인 후, 있다면 해당 값의 짝꿍인 int의 값을 1로 설정

map<string,int> m;
string s1;
cin>>s1;
if(auto i=m.find(s1)!=m.end()) m[s1]=1; //있으면 s1의 짝꿍을 1로 만들어 줌

 

 

- 반복

map을 전체 반복하며 출력

map<string, int> m;
for(auto i=m.begin(); i!=m.end(); i++) //끝까지 돌며
{
    cout<<i->first<<endl; //map의 string 값을 출력
    cout<<i->second<<endl; //map의 int 값을 출력
}

map의 value 값이 1이라면 key 값을 출력

map<string, int> m;
for(auto i=m.begin(); i!=m.end(); i++)
{
	if(i->second==1) cout<<i->first<<endl;
}

'알고리즘 > 이론' 카테고리의 다른 글

[C++] MST 구현  (0) 2022.06.29
MST (Minimum Spanning Tree)  (0) 2022.06.28
우선순위 큐  (0) 2022.06.16
[C++] BST 구현  (0) 2022.06.15
  (0) 2022.06.14