photoner 2020. 9. 15. 19:55
728x90
반응형

Map은 연관 컨테이너에 속하는 컨테이너의 한 종류이다. 파이썬의 Dictionary 사전과 같은 자료구조를 갖는다.

Map은 사전처럼 Key(단어)를 갖고, 그 Key에 해당하는 Value(뜻)를 갖는다. 왼쪽 그림처럼 Apple이라는 단어를 찾으면 사과라는 뜻이 나오 듯, key 값을 넣으면 value 값이 나오는 형태이다.

Map에 자료를 추가하거나, 자료를 찾기 위해서는 insert(), find() 등의 함수를 사용하지만 Map의 특성으로 인해서 추가와 탐색을 한 형태로 나타낼 수 있다.

  my_map["apple"] = "핸드폰"; my_map["apple"];
"apple" key가 my_map내에 있을 경우
(value = "사과")
(1) "핸드폰" 값으로 대입 갱신. (2) "사과"를 반환
"apple" key가 my_map내에 없을 경우 (3) key - apple / value - 핸드폰으로
map 컨테이너에 추가 됨.
(4) 반환되는 값이 없다.

첫 번째, 기존의 동일한 key가 map에 존재하는데, 동일한 key로 다시 value 값을 등록하는 경우는 갱신된다.
두 번째, 기존의 동일한 key가 map에 존재한다면, 기존의 key값에 해당하는 value 값을 반환시킬 수 있다.
세 번째, key가 map에 존재하지 않는데, key로 value 값을 등록하는 경우 map에 새롭게 추가된다.
네 번째, key가 map에 존재하지 않는다면, key 자체도 없고 그에 따라서 value도 없으므로 반환되는 값이 없다.

간단한 예제로 마무리 지을 것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// https://colorscripter.com/
#include <iostream>
#include <string>
#include <map>
 
using namespace std;
 
int main(void)
{
    map<stringstring> my_map; // key에 해당하는 string, value에 해당하는 string
 
    my_map["a"= "apple";
    my_map["b"= "banana";
    my_map["c"= "carrot";
 
    cout << "--- key로 접근하여 value을 출력하기. " << endl;
    cout << my_map["a"<< endl;
    cout << my_map["b"<< endl;
    cout << my_map["c"<< endl;
 
    cout << "--- iterator 이용하여 key와 value 출력하기. " << endl;
    map<stringstring>::iterator it;
    for (it = my_map.begin(); it != my_map.end(); it++)
        cout << it->first << " : " << it->second << endl;
 
    return 0;
}
 
cs

10번 라인과 같이 key 값의 자료형과, value 값의 자료형들을 명시해야한다. 또한 22번 라인에도 또한 동일한 자료형을 명시하여 iterator 선언해야한다.

24번 라인에서 map내의 iterator 클래스의 멤버 first와 second는 각각 key와 value를 나타낸다.

map을 공부하다보니 pair 및 multimap도 관련이 생기고, tuple도 정리해야겠다는 생각이 들었다.

다음 시간에 정리해보자.

728x90
반응형