【问题标题】:Associating and iterating in C++C++中的关联和迭代
【发布时间】:2010-12-08 19:54:57
【问题描述】:

我遇到了一个我想使用关联容器的情况,我选择使用 std::unordered_map,因为这个容器可以用来容纳数百万或更多的元素是完全可行的。但现在我还需要按顺序迭代。我考虑过让值类型在列表中相互链接,但现在我将遇到内存管理问题。

我应该改变容器,比如 std::map 吗?或者只是遍历我的 unordered_map 一次,插入向量,排序,然后迭代?我不太可能需要以有序的方式反复迭代。

【问题讨论】:

  • “我不太可能需要以有序的方式反复迭代。” - 出于兴趣,当您选择unordered_map 时,您是否认为您根本不需要按顺序进行迭代?我想说map 是最简单的可用选项,因此是您应该衡量优化的基准(例如unordered_map 加上单独的排序或排序)。
  • @Steve:我知道我必须这样做,但忘记了,因为第一阶段没有必要。
  • 当然,如果我不厌其烦地为我的密钥编写 hash 函数,我也会热衷于坚持使用 unordered_map :-)
  • @Steve:我并没有真正这样做。只是将一些哈希转发到标准哈希。

标签: c++


【解决方案1】:

嗯,您知道您选择的两种选择的各种操作的 O()。您应该据此进行选择,并根据您需要性能发生的地方以及最适合该性能的容器进行成本/收益分析。

当然,我不可能知道足够多的知识来为您进行分析。

【讨论】:

    【解决方案2】:

    您可以使用Boost.MultiIndex,在同一个底层对象集合上指定无序(散列)索引以及有序索引。

    这可能会导致问题 - 现有关联容器模型没有自然映射,如果您不需要始终使用第二个索引,这可能会有点矫枉过正。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多