【问题标题】:Why is there no [] operator for std::multimap?为什么 std::multimap 没有 [] 运算符?
【发布时间】:2015-01-08 09:49:00
【问题描述】:

为什么 std::multimap 没有 [] 运算符?

errors with multimap (key type is std::string) 中,人们说“从中提取元素是没有意义的——每个索引都有多个值”。对我来说,这很有意义,这就是为什么有 equal_range。

那么,为什么他们决定不为 multimap 添加 [] 运算符呢?

我觉得这是因为像 myMultiMap[key] = value 这样的事情处理起来会很复杂,但我真的不确定。

【问题讨论】:

  • equal_range 产生一个范围,而不是一个元素。 C++ 中所有其他出现的[] 都会产生元素。如果操作员在这种情况下表现不同,那将是非常令人惊讶的。相反,您有一个一致命名的 equal_range 成员函数,它对每个容器都有相同的行为。
  • 好的。但 std::map::operator[] 实际上表现不同。当密钥不存在时,它正在执行插入。
  • @Korchkidu 是的,这很令人困惑,我删除了它。
  • @Korchkidu:也许吧,但请这样考虑:[] 为您提供指定键(映射)或索引(数组)处的元素。是否必须先构造元素是次要的。

标签: c++ c++11


【解决方案1】:

这可能是因为不明确,因为 multiMap[key] 可以表示许多元素,具体取决于使用相同键的插入次数。

operator[] 总是返回一个 lvalue reference 到存在于任何随机可访问容器的提供索引处的元素,因此在 multimap(s) 的情况下将有多个元素对于同一个键。

注意这与基于 HashTable 的容器(std::unordered_map、std::unordered_set)中的冲突不同,其中不同的键可以具有从哈希函数计算的相同哈希值,从而导致元素落在同一个桶里。

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2014-05-20
    相关资源
    最近更新 更多