C++中unordered_map的使用问题
不能用pair做key
unordered_map<pair<int, int>, bool> dd;
当我在初始化unordered_map的时候出现了错误,提示我如下错误
.cpp:6:37: error: use of deleted function 'std::unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::unordered_map() [with _Key = std::pair<int, int>; _Tp = bool; _Hash = std::hash<std::pair<int, int> >; _Pred = std::equal_to<std::pair<int, int> >; _Alloc = std::allocator<std::pair<const std::pair<int, int>, bool> >]'
6 | unordered_map<pair<int, int>, bool> dd;
在下面这个网站中招到了答案:
解答
主旨是说cpp的unordered_map中用std::hash来计算key,但是cpp中没有给pair做hash的函数,所以不能用pair作为unordered_map的key。
但是map可以,因为map里面是通过操作符<来比较大小,而pair是可以比较大小的,所以,map用在这里是可以的。
find返回值的问题
unordered_map<std::string, std::vector<std::string>>> record;
auto recordIter = record.find("a");
for (auto& content : recordIter->second){
}; [1]
for (auto& content : (*recordIter).second){
}; [2]
unordered_map的find函数返回的是一个迭代器虽然可以可以按照第一种方式取出key但是这种方式是不安全的,因为不是每一个版本的c++返回回来的都是迭代器的指针,一旦变成其他的内容,将会导致这个循环报错;所以通常是按照第二种方式将指针指向的迭代器的值给打开,通过这个值的second进行取值。