std :: map的非变异版本

时间:2017-04-18 20:27:29

标签: c++ stl

我正在寻找调整容器行为的最佳做法。 stl容器不太适合继承,编写50个传递方法也不理想。这是我今天要处理的具体例子。

在std :: map上调用operator [](T t)将插入一个未找到_first的条目。

std::map<int,string> m;
string s = m[10]; // will insert empty string into the map

所以我最后打电话给这样的话。

string mapfind(int id, const map<int, string>& m)
{
     auto entry = m.find(id);
     if(entry != m.end())
     {
        return *entry;     
     } else {
        return "not found";
     }
};

这也很糟糕,因为外部函数需要知道被调用。如何修改容器以使用默认值而不是改变状态?

1 个答案:

答案 0 :(得分:3)

您只需致电std::map::at()即可。如果元素不在地图中,它将抛出:

string s = m.at(10); // throws