标题:for_each中用lambda表达式遍历时,出错,,请各位指教
只看楼主
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
已结贴  问题点数:20 回复次数:7 
for_each中用lambda表达式遍历时,出错,,请各位指教
#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;
}
错误信息如下
搜索更多相关主题的帖子: 表达式 map int string insert 
2018-11-28 22:22
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:10 
for_each(m.cbegin(), m.cend(), [](const pair<T, U> &it) {cout << it.second << endl;});
map 的访问方法有些特殊, 它的迭代器并不能直接向 pair 转型
2018-11-28 22:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
除了 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';} );
}

2018-11-29 08:38
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 2楼 Jonny0201
好的谢谢。。

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

2018-11-29 14:24
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 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编辑过]

2018-11-29 14:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 5楼 花脸
从图片上看,你使用的是 gcc 4.9.2,它叫你编译参数添加 -std=c++1y
我觉得这一切蛮古老的,最好升级到 gcc 8.x或9.x,然后编译参数添加 -std=c++2a
2018-11-29 15:43
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
回复 6楼 rjsp
好的 谢谢。
2018-11-29 18:50
wj839656997
Rank: 2
等 级:论坛游民
帖 子:11
专家分:11
注 册:2018-12-4
得分:0 
lambda不是pyhon中的一个函数吗? 怎么c++也有这东西?
2018-12-05 17:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491652-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.145709 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved