遍历地图并将对用作参考参数C​​ ++ 11

时间:2018-06-22 11:22:02

标签: c++ c++11 stdmap auto

我有一个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的方式实现它。

3 个答案:

答案 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_typestd::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
}