【发布时间】:2014-02-22 14:51:02
【问题描述】:
我想到了四种按值在地图中查找的方法。就速度而言,这些方法的优先顺序是什么?
假设 key 和 value 在它们之间都是唯一的。
std::map<int, std::string> 或 std::unordered_map<int, std::string>
- 如果 boost 库可用,请使用
boost::bimap - 将
std::find_if与带有一些相等比较逻辑的谓词/函子一起使用 - 在填充
std::map<int, string>时,创建并填充 另一个std::map<std::string, int>并在第二张地图上执行map::find。 - 遍历整个地图并检查
if (iter->second == value_to_find), 如果找到break;
我将始终按键执行查找,并按值执行一次或两次。
【问题讨论】:
-
如果在
std::map中按值搜索是一种常见操作,那么您可能一开始就不应该使用std::map。 -
我认为,当您使用 std:map 时,第 4 种方法没有意义。为什么可以使用 map::find 代替?
-
如果要同时按值和键查找,boost::bimap 是正确的选择。但是如果你只想按值搜索,为什么不使用以字符串“value”为键的map或multimap呢?无论如何,如果您对第三点有问题,您可能不得不使用 multimap 来代替
标签: c++ map stl containers