今天我注意到empty_map [key]将在地图中创建一个null元素。我没想到。是否有像容器的地图,我只是得到null而不是创建一个元素?我想没有并且需要用.find()
替换所有的[]答案 0 :(得分:3)
你被find()困住了。这就是map
的设计方式,并且没有类似的容器与该行为作为唯一的区别。 (或者如BoBTFish所说,你可以使用at
)
要详细说明,您不能引用NULL值。这意味着你可以拥有一个指向元素或end()的迭代器,或者你可以拥有一个返回引用或抛出异常的方法。 find()
和at()
是这两个选项。
答案 1 :(得分:1)
如果您不喜欢它,可以创建自己的容器,委托给std::map
,但提供const
operator[]
的{{1}}实现。当然,请注意operator[]
返回引用的重点是:
std::map<Key, Value> theMap;
theMap[someKey] = someValue;
可以工作。否则你将被迫做:
theMap.insert(std::make_pair(someKey, someValue)];
这似乎比使用find
/ at
查找更糟糕的权衡。 (或者你可以让operator[]
返回一个迭代器到找到的项目,但那么这与使用find
完全相同。)