0

今天我只注意到 empty_map[key] 将在地图中创建一个空元素。我没想到。有没有像容器一样的地图,我只会得到 null 而不会创建元素?我想没有也需要用 .find() 替换我的所有 []

4

2 回答 2

3

你被 find() 困住了。这map就是设计的方式,并且没有类似的容器具有这种行为作为唯一的区别。(或者正如 BoBTFish 所说,你可以使用at

更详细地说,您不能引用 NULL 值。这意味着您可以拥有一个指向元素或 end() 的迭代器,或者您可以拥有一个返回引用或引发异常的方法。 find()并且at()是这两个选项。

于 2012-04-24T09:00:08.943 回答
1

如果您不喜欢它,您可以制作自己的容器来委托std::map但提供不同constoperator[]. 当然,请注意operator[]返回引用的全部意义在于:

std::map<Key, Value> theMap;
theMap[someKey] = someValue;

能行得通。否则你将被迫这样做:

theMap.insert(std::make_pair(someKey, someValue)];

这似乎比使用find/at进行查找更糟糕。(或者您可以将operator[]迭代器返回到找到的项目,但这与使用完全相同find。)

于 2012-04-24T09:22:41.107 回答