본문 바로가기

프로그래밍 언어 (プログラミング言語)/C && C++

Map vs Multimap

Map은 보통 중복된 값을 허용하지 않는다.

그러나 중복된 값을 허용하면서 동시에 Map을 이용하고 싶을 때에는 STL의 Multimap을 사용하면 된다.

multimap에 대한 자세한 내용은 아래 링크를 참조!

https://blockdmask.tistory.com/88

 

[C++] multimap container 정리 및 사용법

안녕하세요, BlockDMask 입니다.오늘은 연관 컨테이너(Associative container) 중 multimap 에 대해서 알아보도록 하겠습니다.multimap은 map과 거의 동일하지만 딱 한부분 만 다릅니다.key값이 중복 가능하다.map

blockdmask.tistory.com

 

숙지하지 못한 map의 사용법

1. map은 무조건 key값으로만 조회를 한다.

-> 백준을 풀다가 map에 인덱스를 이용하여 접근하지는 못할까? 라는 생각에 이리저리 시도를 해 본 결과, 불가능하다는 결론에 도달하였다. map은 불가피하게 key값으로만 접근이 가능하다. 

#include <iostream>

#include <string>

#include <map>

using namespace std;

int main() {

map<string, int> m;

m["김철수"] = 15// key값을 배열의 인덱스 형태로 해서 접근 가능. 

m["김영희"] = 23;

cout << "철수의 나이: " << m["김철수"] << endl;

cout << "영희의 나이: " << m["김영희"] << endl;

return 0; }

2.  map<key,value>::iterator라는 반복 연산자를 사용하여 순차적인 접근만 가능하다.  

-> key값으로 map에 접근하려고 하는 것이 아닌 이상, map에 접근할 수 있는 방법은 for문과 함께 반복 연산자(iterator)을 사용하는 것이다.

그러나 iterator 사용법으로 조심해야 할 것이 있다.

ex) map<int,int > :: iterator it = map.find("apple");

cout << it->second<<endl; // NO PROBLEM;

cout << (it + 1)->second << endl; // FAILE!! 

-> iterator는 for문의 증감식 이외의 곳에서는 포인터 연산을 허용하지 않는다. 

for( it = map.begin() ; it != map.end(); it++

포인터 연산을 허락하더라도 it += 1, it += 2와 같은 연산은 허용하지 않고, 오오로지 it++만 허용을 한다.