Ane*_*nan 45 c++ dictionary stdmap
我有一张地图,即valueMap
typedef std::map<std::string, std::string>MAP;
MAP valueMap;
...
// Entering data.
Run Code Online (Sandbox Code Playgroud)
然后我通过引用将此映射传递给函数
void function(const MAP &map)
{
std::string value = map["string"];
// By doing so I am getting an error.
}
Run Code Online (Sandbox Code Playgroud)
如何从地图中获取值,该值作为函数的引用传递?
Ste*_*sop 71
不幸的std::map::operator[]是,它是一个非const成员函数,你有一个const引用.
您需要更改签名function或执行以下操作:
MAP::const_iterator pos = map.find("string");
if (pos == map.end()) {
//handle the error
} else {
std::string value = pos->second;
...
}
Run Code Online (Sandbox Code Playgroud)
operator[]通过向地图添加默认构造的值并返回对它的引用来处理错误.当你拥有的只是一个const引用时,这是没用的,所以你需要做一些不同的事情.
如果你的程序逻辑以某种方式保证已经是一个关键,你可以忽略这种可能性并写入.显而易见的问题是,如果您错了,那么您将获得未定义的行为.string value = map.find("string")->second;"string"
Gab*_*bow 21
如果缺少键,map.at("key")抛出异常
如果k与容器中任何元素的键不匹配,则该函数抛出out_of_range异常.
http://www.cplusplus.com/reference/map/map/at/