[C++] 맵 : unordered_map (hash_map)
find와 count로 exist 체크
내부에 해당 key가 존재하는지는 ``c count()/find()``를 사용한다.
중복을 허용하지 않는 자료구조에서 둘은 내부적으로 거의 똑같기 때문에, 취향 대로 사용하면 된다.
```cpp
#include <iostream>
#include <unordered_map>
std::unordered_map<std::string, int> hash_map;
int main() {
hash_map.insert(std::make_pair("umbum", 1234)); // hash_map["umbum"] = 1234 도 가능.
if (hash_map.count("umbum")) {
std::cout << hash_map["umbum"] << '\n';
}
auto item = hash_map.find("umbum");
if (item != hash_map.end()) {
std::cout << item->first << ' ' << item->second << '\n';
}
}
주의! m[5]; 를 쓰는 것 만으로도 m[5]가 생성된다!
```
```
1
```
``cpp m.find(5)`` 해봐도 해당 키가 있는 것으로 나온다.
`` m[5]``하는 순간 맵에 ``cpp key:value = 5:NULL`` 이렇게 잡혀버리는 듯. 그래서 해당 키가 있냐 없냐를 따지면 있는 것으로 나옴!
m.insert(make_pair) 보다는 python에서 하듯 m[key]를 사용해라
이미 있는 키에 insert를 하면 변하지 않는다. 이게 꽤 직관과는 다르게 동작하는 부분이라, `` m[key]`` 접근을 사용하는게 좋아보인다.
객체를 value로 쓰는 경우, 생성자 두개가 모두 있어야 한다.
```cpp
class T {
public:
int i;
T() {}
T(int _i): i(_i) {}
};
m[2] = T(2);
```
'Languages & Frameworks > C C++' 카테고리의 다른 글
[C/C++] strncpy()는 NULL문자를 넣어주지 않는다. (0) | 2018.08.21 |
---|---|
[C++] \r이 포함된 문자열 출력할 때 이상하게 출력되는 현상 (0) | 2018.08.21 |
[C++] directory listing (traversal) (0) | 2018.08.10 |
[C/C++] clock : 수행 시간 측정 / logging : 에러 출력 (0) | 2018.08.09 |
[C++] File IO : <ifstream> 과 pubsetbuf() (0) | 2018.08.03 |