【发布时间】: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:也许吧,但请这样考虑:
[]为您提供指定键(映射)或索引(数组)处的元素。是否必须先构造元素是次要的。