>>[C++ 관련 모든 글 보기]
1. map 이란?
Key, Value 쌍인 데이터를 균형 binary tree로 관리하는 자료구조입니다.
* 2진 트리 종류는 Red-Black Tree을 사용
2. map은 언제 쓰는가?
1) 입력하는 자료를 정렬해야 한다.
2) 많은 자료를 저장하고, 검색이 빨라야 한다
3) 빈번하게 삽입, 삭제하지 않는다.
- 삽입, 삭제 시 자동 정렬이 발생하여 속도가 느려집니다.
3. map의 핵심 기능
1) find
(1) map은 key가 있다면 vector처럼 Random access가 가능합니다.
(2) iterator를 사용하여 순차적으로 검색이 가능합니다.
2) Insert
(1) map은 자료를 삽입 시 내부에서 자동으로 Key 기준으로 오름차순 정렬(기본 정렬)을 하고 삽입이 됩니다.
(2) std::map의 원소는 std::pair 객체로 저장된다.
(3) key 중복은 허용하지 않습니다.
(4) 실행 중에 동적으로 크기가 확장됩니다
3) erase
(1) Random access 하여 삭제가 가능합니다.
4. 헤더
#include <map>
5. 기본 사용법
1) create / insert / find / delete / for loop / erase for loop
#include <map>
int main()
{
/* 1. create */
std::map<int, int> map1;
/* 2. insert */
map1.insert(std::make_pair(1, 10); // insert
map1.insert(std::make_pair(2, 20); // insert
map1.insert(std::make_pair(3, 30); // insert
/* 3. find */
std::cout << "Find Key " << map1.find(1)->first << std::endl;
std::cout << "Find data " << map1.find(1)->second << std::endl;
/* 4. erase */
map1.erase(1);
/* 5. for loop */
std::map<int, int>::iterator it;
for (it = map1.begin(); it != map1.end(); it++) {
std::cout << "key : " << it->first << " Value : " << it->second << std::endl;
}
/* 6. erase in loop
* 다음과 같이 짜야 하는이뉴는 erase시 전달되는 인자가 무효화 되기 때문 입니다.
* 그래서 it++ 을 통하여 복사 전달한 인자만 무효화 되고 증가 된 값을 it가 참조 하게 해야 합니다.
* 원본 설명 https://kukuta.tistory.com/81
*/
for(it = map1.begin(); it != map1.end();) {
if(it->second == value) {
map1.erase(it++);
}
else {
++it;
}
}
return 0;
}
2). operator [] 연산자 (유용하게 사용)
loop을 돌리지 않고 바로 바로 값을 찾을수 있어서 좋음
#include <iostream>
#include <map>
int main()
{
std::map<std::string, int> test;
test["first"] = 1;
test["second"] = 2;
test["third"] = 3;
std::cout << test["first"] << std::endl;
std::cout << test["second"] << std::endl;
std::cout << test["third"] << std::endl;
return 0;
}
6. 지원하는 함수 정리
멤버 | 설명 |
begin | 첫 번째 원소의 랜덤 접근 반복자를 반환 |
clear | 저장하고 있는 모든 원소를 삭제 |
empty | 저장 하고 있는 요소가 없으면 true 반환 |
end | 마지막 원소 다음의(미 사용 영역) 반복자를 반환 |
erase | 특정 위치의 원소나 지정 범위의 원소들을 삭제 |
find | key와 연관된 원소의 반복자 반환 |
insert | 원소 추가 |
lower_bound | 지정한 key의 요소를 가지고 있다면 해당 위치의 반복자를 반환 |
operator[] | 지정한 key 값으로 원소 추가 및 접근 |
rbegin | 역방향으로 첫 번째 원소의 반복자를 반환 |
rend | 역방향으로 마지막 원소 다음의 반복자를 반환 |
size | 원소의 개수를 반환 |
upper_bound | 지정한 key 요소를 가지고 있다면 해당 위치 다음 위치의 반복자 반환 |
>>[C++ 관련 모든 글 보기]
참고 자료
1. http://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS9990721111
'ProgrammingLang > c++' 카테고리의 다른 글
[C++ 개발자되기] 12. text file read 및 write (0) | 2019.12.05 |
---|---|
[C++ 개발자되기] 11. multi thread를 위한 lock 사용법 (0) | 2019.12.04 |
[C++ 개발자되기] 9. type casting (cast operator) (3) | 2019.11.15 |
[C++ 개발자되기] 8. binary file read 및 write (3) | 2019.09.09 |
[C++ 개발자되기] 6. istringstream, ostringstream, stringstream 사용법 (4) | 2019.07.24 |