C++ 通过非自动非常量左值引用时for_、map和lambda各出错

C++ 通过非自动非常量左值引用时for_、map和lambda各出错,c++,lambda,foreach,reference,auto,C++,Lambda,Foreach,Reference,Auto,在下面的代码中,每个语句的第一个给出了GCC 7.2中的错误,其中一些表示: 无法将“std::pair&”类型的非常量左值引用绑定到“std::pair”类型的右值 #包括第一个,因为每个都应该有效(我还发现了另一个答案也是如此) 在线代码:您不能修改std::map的键,所以您应该使用 std::for_each(std::begin(m), std::end(m), [](std::pair<const int, double>& e){ e

在下面的代码中,每个语句的第一个
给出了GCC 7.2中的错误,其中一些表示:

无法将“std::pair&”类型的非常量左值引用绑定到“std::pair”类型的右值

#包括第一个
,因为每个
都应该有效(我还发现了另一个答案也是如此)


在线代码:

您不能修改
std::map
的键,所以您应该使用

  std::for_each(std::begin(m), std::end(m),
            [](std::pair<const int, double>& e){ e.second += 1.0; });
std::对于每个(std::开始(m),std::结束(m),
[](std::pair&e){e.second+=1.0;});
试试这个:

  std::for_each(std::begin(m), std::end(m),
            [](std::pair<const int, double>& e){ e.second += 1.0; });
std::对于每个(std::开始(m),std::结束(m),
[](std::pair&e){e.second+=1.0;});
将成对的
元素声明为
常量
非常重要。请参见
std::map
中的
value\u type
成员类型


在你的下一行中,
auto
起作用,因为它会自动将
Key
声明为
const

另请参见@DanielLangr不要盲目相信答案,尤其是当他们说“你可以试试这个…”时。)@DanielLangr也检查答案下面的评论。
  std::for_each(std::begin(m), std::end(m),
            [](std::pair<const int, double>& e){ e.second += 1.0; });