从地图中获取价值

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"

  • 如果你的编译器还不支持 `auto`,请使用 `MAP::const_iterator` 而不是 `auto`。 (2认同)

Gab*_*bow 21

如果缺少键,map.at("key")抛出异常

如果k与容器中任何元素的键不匹配,则该函数抛出out_of_range异常.

http://www.cplusplus.com/reference/map/map/at/