【问题标题】:Why would std::unordered_map::emplace() fail?为什么 std::unordered_map::emplace() 会失败?
【发布时间】:2014-04-14 14:24:41
【问题描述】:

我有一个std::unordered_map,我通过emplace() 一个对象:

my_map.emplace(std::piecewise_construct,
               std::forward_as_tuple(key),
               std::forward_as_tuple(value1, value2));

这在运行时的某个时刻失败,false 在返回的元组的第二个位置。有没有办法获得有关正在发生的事情的更多信息? top 没有显示任何内存问题。

【问题讨论】:

  • 真正的男人不看手册,但程序员有时应该:en.cppreference.com/w/cpp/container/unordered_map
  • @DavidRodríguez-dribeas 我多次阅读en.cppreference.com/w/cpp/container/unordered_map/emplace。 “返回值”部分对我来说不像 Angew 的回答那么清楚。
  • 公平点,emplace 的文档应该改进,它缺少insert 文档中的一个关键语句:它可能无法插入的条件不抛出 和异常。
  • 问:我尝试稍微改进一下 cppreference 中的文档,但我不确定它现在清晰了多少。是不是更清楚了?
  • @DavidRodríguez-dribeas 您更改了哪个文件?我没有看到 unordered_map 或 emplace 的任何近期修订历史记录。

标签: c++ c++11 unordered-map


【解决方案1】:

.second 中的 false 表示“已存在等效元素”。在这种情况下,.first 中的迭代器指向该等效元素。

所以发生的事情是您已经在地图中拥有key,您可以在返回值上使用.first 来访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多