【问题标题】:Why does the C++ std::unordered_map returning an iterator from emplace / find?为什么 C++ std::unordered_map 从 emplace / find 返回一个迭代器?
【发布时间】:2020-07-04 04:36:41
【问题描述】:

我明白为什么 unordered_map 有一个迭代器(begin() 和 end()),但我看不出从 find / emplace 返回迭代器的值是什么。

我无法想象这样一个用例,您希望在给定键而不是开始/结束处启动迭代器(因为一个好的散列函数应该使键在表中的位置任意)。

另一种选择;只返回值、对值的引用或键和值对涵盖了我可以想象的所有用例,避免了创建迭代器的不必要工作,并且在使用它访问底层对/值时可能导致额外的内存延迟.

【问题讨论】:

  • 如果find 找不到值怎么办?那你返回什么?
  • 返回值的副本或一对键和值比返回迭代器更“不必要的工作”。迭代器很便宜。
  • 取决于可能是真的类型。然而,指向底层货币对(或只是底层价值)的指针会更便宜。

标签: c++


【解决方案1】:

如果您想删除该项目怎么办?如果要提取或合并它怎么办?如果你想用它作为就位的提示呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2020-02-14
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多