set, map은 트리 구조여서 O(log(n))으로 remove,insertion,access가 가능하다.
또한 sorted 되어 있다.
그리고 별도로 comparision operator를 정의해야 한다.
unordered_set, unordered_map은 hash를 사용하여 O(1)로 가능하다.
이름과 같이 unordered이기 때문에 sort는 불가능하다.
그러나 사이즈가 커지면 O(n)의 복잡도로 rehashing이 일어날 수 있다.
이를 방지하기 위해서 reserve로 메모리를 미리 확보해야 한다.
또한 ==operator와 hashing 구조체를 별도로 구현해야 한다.
그리고 unoredred_map의 코드를 첨부한다.
set과 unordered_set은 Key만 고려하면 되고
map과 unordered_map은 Key-Value 관계를 고려해야 한다.
또한 중복을 허용하는 multiset, multimap도 있다.
코드 >>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
// unorder_map은 time complexity가 O(1)이다.
//std::unordered_map<int, std::string> idNames;
std::unordered_multimap<int, std::string> idNames; // 중복 허용
idNames.emplace(1, "nocope");
idNames.emplace(2, "kitty");
idNames.emplace(3, "nabi");
idNames.emplace(1, "bingo"); // 충돌
//idNames[1] = "bingo";
//std::cout << idNames[100] << std::endl;
for (const auto& idname : idNames)
{
std::cout << idname.first << " " << idname.second << std::endl;
}
return 0;
}
|
'C' 카테고리의 다른 글
c++ stack, Queue (0) | 2021.06.27 |
---|---|
c++ list와 vector 비교 (0) | 2021.06.27 |
c++ unordered_set 사용 기록 (0) | 2021.06.27 |
c++ map 사용 방법 (0) | 2021.06.27 |
c++ set, multiset, 커스텀 비교 함수, 커스텀 클래스 (0) | 2021.06.27 |