operator[]
onstd::map< class Key, class Value
用于获取与特定键对应的值(实际上,它返回一个引用,但是 w/e)。在您的情况下,您将像这样使用它:
(代码段1)
std::map<std::string,std::vector<std::string>> m;
<...>
std::string the_key_you_need("this is the key");
std::vector< std::string > value = m[the_key_you_need];
value.push_back(<...>)
这与以下内容不同:
(代码片段2)
std::map<std::string,std::vector<std::string>> m;
<...>
m[the_key_you_need].push_back(<...>);
因为在第一个中,您正在制作named的副本,并将新字符串推入副本中,这意味着它不会以. 第二个是正确的方法。m[the_key_you_need]
value
m
此外,m[<something>] = value.push_back(<something_else>)
将不起作用,因为vector::push_back()
返回无效。如果你想这样做,你需要:
(代码片段3)
std::map<std::string,std::vector<std::string>> m;
<...>
std::string the_key_you_need("this is the key");
std::vector< std::string > value = m[the_key_you_need];
value.push_back(<...>)
m[the_key_you_need] = value;//here you are putting the copy back into the map
在这种情况下,代码段 2 和 3 确实是等价的(但代码段 2 更好,因为它不会创建不必要的副本)。