我有一个std::map
。我想对其进行迭代,并将结果用作函数的参数。编译似乎抱怨我的对象是左值,但是我无法弄清为什么将其视为左值。
void my_function(std::pair<std::string, std::string>& my_arg){
//do stuff, modify elements from the pair
}
std::map<std::string, std::string> my_map;
// fill the map with values...
for(auto& element : my_map){
my_function(element);
}
我可能可以使用迭代器来解决此问题,但是我想学习如何以c ++ 11的方式实现它。
答案 0 :(得分:7)
value_type
中的std::map
及其迭代器是std::pair<const std::string, std::string>
,而不是std::pair<std::string, std::string>
。换句话说,键在C ++映射中始终是恒定的。
答案 1 :(得分:3)
std::map<std::string, std::string>::value_type
是std::pair<const std::string, std::string>
:注意const
。如果允许您修改一对中的键,则可能会违反映射项按键排序的不变性。由于您使用了不同的pair
类型,因此引用无法绑定到实际对象。
答案 2 :(得分:2)
为了保持一致性(尤其是在某个时候将其作为模板),我将像这样定义您的函数:
void my_function(std::map<std::string, std::string>::value_type& my_arg){
//do stuff, modify elements from the pair
}