C++中unordered_map的使用问题

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进行取值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值