std :: map不能插入空?

时间:2012-04-24 08:55:49

标签: c++ map

今天我注意到empty_map [key]将在地图中创建一个null元素。我没想到。是否有像容器的地图,我只是得到null而不是创建一个元素?我想没有并且需要用.find()

替换所有的[]

2 个答案:

答案 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完全相同。)