例如:
代码1:
if((iter = map.find(key)) != map.end()) {
return iter->second;
}
return 0;
Run Code Online (Sandbox Code Playgroud)
码2:
if(map.count(key) > 0) {
return map.at(key);
}
return 0;
Run Code Online (Sandbox Code Playgroud)
代码2是更简单的,但两者map.count()和map.at()成本O(LOGN)的时间.是否std::map提供了一个功能,可以将最后一个搜索项存储在缓存中并更快地搜索相同的项目,还是仅在整个地图中执行第二次搜索?
它在整个地图上进行搜索,没有进行缓存 - 或者至少,标准没有强制执行,我会说没有实现它,因为这样的实现的所有客户都必须支付可能不需要的每次插入/删除后更新缓存信息的开销.
第一种方法是确定键/值对是否包含在映射中的惯用方法(只记住operator ->应该使用的事实而不是operator .,因为你得到的find()是迭代器,并且赋值iter应该在if条件之外):
auto iter = map.find(key);
if (iter != map.end()) {
return iter->second;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |