오늘은 map에 관하여 포스팅을 해 보려고 합니다.
std::map은 key와 value가 pair 형태로 저장되며, 주로 key를 사용하여 value를 빠르게 탐색하기 위해 자주 쓰이는 컨테이너입니다.
map은 노드기반 균형이진트리 구조로 삽입시 자동으로 정렬이 됩니다.
map 사용방법은 아래처럼 간단합니다.
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(void)
{
map<int, string> _testMap;
_testMap.insert(make_pair(1, "data1"));
_testMap.insert(make_pair(2, "data2"));
_testMap.insert(make_pair(3, "data3"));
_testMap.insert(make_pair(4, "data4"));
_testMap.insert(make_pair(5, "data5"));
_testMap.insert(make_pair(6, "data6"));
cout << "-------------data------------" << endl;
for (map<int, string>::iterator itor = _testMap.begin(); itor != _testMap.end(); ++itor)
{
cout << "[ key : " << itor->first << ", data : " << itor->second << " ]"<< endl;
}
}
< 결과창 >
-------------data------------
[ key : 1, data : data1 ]
[ key : 2, data : data2 ]
[ key : 3, data : data3 ]
[ key : 4, data : data4 ]
[ key : 5, data : data5 ]
[ key : 6, data : data6 ]
map 은 연산자 operator[]를 사용할 수 있고, 사용법은
map[ key ] = value
value = map[ key ]
와 같이 사용할 수 있습니다.
아래참조
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(void)
{
map<int, string> _testMap;
_testMap[0] = "data 0";
_testMap[1] = "data 1";
_testMap[2] = "data 2";
_testMap[3] = "data 3";
_testMap[4] = "data 4";
_testMap[5] = "data 5";
for (int i = 0 ; i < _testMap.size() ; ++i)
{
cout << "[ " << _testMap[i] << " ]" << endl;
}
}
하지만 map의 연산자[]는 배열이나 vector의 연산자[]와는 다르게 아직 생성되지 않은 key의 operator[]에 접근하더라도 예외가 발생하지 않습니다.
아래 코드의 경우 vector로 만들어졌다면, 출력하는 부분에서 생성되지 않은 index에 접근한 것에 대한 exception이 발생할 것입니다.
하지만 map의 경우 아래와 같이 새 key가 생성되는 것에 주의하여야 합니다.
int main(void)
{
map<int, string> _testMap;
_testMap[0] = "data 0";
_testMap[1] = "data 1";
_testMap[2] = "data 2";
cout << "[ " << _testMap[7] << " ]" << endl;
}
map의 사이즈 (아무것도 없는것)
x64에서 24
x86에서 12
포인터 3개를 가지고 있습니다.
vector의 사이즈
x64에서 32
x86에서 16
포인터 4개를 가지고 있습니다.
'STUDY > C++' 카테고리의 다른 글
스마트포인터 shared_ptr 구현하기 (1) (3) | 2020.05.11 |
---|---|
편리하지만 주의해야 하는 연산자 오버로딩 operator (0) | 2020.04.22 |
선언과 정의에 따른 메모리 (0) | 2019.06.23 |
new 와 new []의 차이점 (0) | 2019.06.10 |
[ STL ] 표준 시퀀스 컨테이너(vector, deque, list) (0) | 2018.03.12 |