unordered_map会是一个不错的选择吗?

时间:2015-07-02 12:06:59

标签: c++ dictionary vector std

我想知道unordered_map是否是我特定问题的容器的好选择。我读到的关于地图的内容并没有真正涵盖我的内容,即:

  • 容器将存储100到500个对象(不是 int / double ...)
  • 尺寸永远不会改变。
  • 顺序并不重要,因为对象本身包含某种“索引”。
  • 经常(!)我需要过滤容器中有一些元素的所有元素 财产(例如有color==blue

目前我使用矢量,这是有效的。但是,如果是unordered_map会提高性能(关于“过滤”)我可以想象改变它。

3 个答案:

答案 0 :(得分:4)

如果您有多个搜索条件(有时为std::unordered_map,有时为color == blue),

flavour == up将无法真正帮助您,因为地图仅提供单个快速查询,确定的关键。

我说std::vector对你来说很合适,理想情况下包装在你自己的结构中,它将提供查找界面。如果后来的分析告诉您这不够快,您可以在这些数据之上构建自己的索引。您甚至不必手动执行此操作,boost::multi_index是专为多标准查找而设计的通用容器。

答案 1 :(得分:1)

我会使用vector或简单的数组来存储实际数据。并且有一些map用映射键指向实际数据。

这会增加内存使用量,但如果经常需要使用不同的索引进行搜索,可能会牺牲一些内存。

答案 2 :(得分:1)

哈希表(std::unordered_map是)为一个键(键值对)提供常量时间查找。然而,它的常数因子总是更高(即,查找更慢)而不是简单数组(它为整数索引提供恒定时间查找)。

如果您需要根据某些条件过滤元素集合,则需要检查每个元素。在这种情况下,哈希表比数组/向量性能严格严格,因为它的计算复杂度与数组索引相同,但具有更差的常数因子。

所以不,在这种情况下你没有理由想要使用unordered_map