注册 登录
编程论坛 C++教室

for_each中用lambda表达式遍历时,出错,,请各位指教

花脸 发布于 2018-11-28 22:22, 2603 次点击
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

int main()
{
    map<int ,string> m;
    m.insert(pair<int,string>(1,"a"));
    m.insert(pair<int,string>(2,"c"));
    m.insert(pair<int,string>(3,"d"));
    m.insert(pair<int,string>(4,"e"));
    m.insert(pair<int,string>(5,"f"));
    m.insert(make_pair(6,"g"));
    m.insert(map<int,string>::value_type (7,"h"));
    m.insert(pair<int,string>(8,"i"));
   
    for_each(m.begin(),m.end(),[](map<int,string>::iterator it)
                {
                    cout<<it->second;
                });
    return 0;
}
错误信息如下
只有本站会员才能查看附件,请 登录
7 回复
#2
Jonny02012018-11-28 22:53
for_each(m.cbegin(), m.cend(), [](const pair<T, U> &it) {cout << it.second << endl;});
map 的访问方法有些特殊, 它的迭代器并不能直接向 pair 转型
#3
rjsp2018-11-29 08:38
除了 Jonny0201 的方法,还可以用auto让编译器自己推导

程序代码:
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

int main()
{
    map<int,string> m { {1,"a"}, {2,"b"}, {3,"c"} };
    for_each( cbegin(m), cend(m), [](const auto& p){cout<<p.second<<'\n';} );
}

#4
花脸2018-11-29 14:24
回复 2楼 Jonny0201
好的谢谢。。

[此贴子已经被作者于2018-11-29 14:37编辑过]

#5
花脸2018-11-29 14:24
回复 3楼 rjsp
那个 我用的编译器(Devc++)自动推到不出来。。。
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

int main()
{
    map<int ,string> m;
    m.insert(pair<int,string>(1,"a"));
    m.insert(make_pair(2,"b"));
    m.insert(map<int,string>::value_type (3,"c"));
    m.insert(pair<int,string>(4,"d"));
    for_each(m.cbegin(),m.cend(),[](const auto &it)
        {
            cout<<"first:"<<it.first<<" second:"<<it.second<<endl;
        }
       );
    return 0;
}
只有本站会员才能查看附件,请 登录

[Warning] use of 'auto' in lambda parameter declaration only available with -std=c++1y or -std=gnu++1y
说是auto只在with -std=c++1y or -std=gnu++1y合法。。。

[此贴子已经被作者于2018-11-29 14:38编辑过]

#6
rjsp2018-11-29 15:43
回复 5楼 花脸
从图片上看,你使用的是 gcc 4.9.2,它叫你编译参数添加 -std=c++1y
我觉得这一切蛮古老的,最好升级到 gcc 8.x或9.x,然后编译参数添加 -std=c++2a
#7
花脸2018-11-29 18:50
回复 6楼 rjsp
好的 谢谢。
#8
wj8396569972018-12-05 17:02
lambda不是pyhon中的一个函数吗? 怎么c++也有这东西?
1