CPP 从入门到入坟02 for_each 循环
话接上回:
for_each
最后我们会遇到一个问题
我们要怎么输出上面那串map呢?
你可能会想
cout<<'a'<<eee['a']<<" "<<'b'<<eee['b']<<" "<< ....<<eee['z']<<endl;
太过噁心且没效率
所以我们来介绍一下 for_each循环
语法:
//for( 宣告类型 变数名称 : 要被遍历的容器之变数名称)for( int it : eee)
简单来说,我今天要取出map
里的东西,我需要另外一个变数
这里使用:
让it 指向eee的第一个值也就是 eee['c']
而随着for
的第一次结束后,it就改会指向eee的第二个值,也就是eee['e']
而随着for
执行第一次、第二次直到it指向最后一个值后结束for
迴圈
但这样写是错的!!
如果你细心一点就会发现,eee不是有两种类别吗(char,int)
那到底 it 指的是 key 还是 value 呢
其实两个都有指到
所以我们在for
迴圈里的宣告式int
会报错(it 在指向 key 时会因为类别不同而报错)
所以者时候会需要一个可以有两个tpye的宣告式了
写就是pair 顾名思义 pair 是一对所以我们只要把int
改成pair
就好了!
pair
的用法:
pair<宣告类别1 , 宣告类别2 >
宣告类别1 跟 key 的type一样
宣告类别2 跟value的type一样
也就是这样
for(pair<char,int> it : eee) // char 指向 key (也是char类别) || int 指向 value (也是int类别)
但是我们要怎么分离 key 与 value 呢 ?
直接结论 :
it.first ==> key
irt.second ==>value
怎么记住呢
因为我们在宣告时会先宣告key所以是first ,再来才是value 所以是 second
补足程式码
for(pair<char,int> it : eee){ cout<<it.first<<" "<<it.second<<endl;}
就可以得到以下结果:
c 1e 1h 2l 2o 1 p 2
如果你懒得记这个pair
也可以用 auto
也是一种宣告型态
当 变数接收到什么型态,他就是那种型态
auto test;test = 1;//int typetest = "SB";//string type
利用这个原理:
for(auto it : eee){ cout<<it.first<<" "<<it.second<<endl;}
当it.first 时型态为char
当it.second型态为int
ok,以上就是这是的内容
如果你可以看到这里真的很厉害!!
有任何的疑问欢迎在群组提出喔
接下来我会出一题简单的题目确定你已经会运用了
最下方有题示,各位可以在留言讲自己的解答喔~
题目
承接到最一开始的情境
今天我想第组程式来记录每位候选人得了几票
首先会先输入T,总共有T张票
接下来同一行会依序输入投票号码
与名众名称
例如 3 tom jolly ==>tom jolly 投给 3 号候选人
然后有以下规则:
投下X
同个人投票两次以上
投票号码 > 3(不含3)
视为废票
测值保证不会有平手的情况
请印出 :当选号码
投票号码1
票数
投票号码2
票数
投票号码3
票数
废票
票数
sample input 1:
71 jason ho6 petter li2 prtter zu3 liliy hus2 sume homX jetty2 zuli ho
sample output 1:
21 12 33 1废票 2
sample input 2 :
61 jason li3 tom hom1 tom li2 jason li 1 uu jaX ii peak
sample output 2:
11 22 03 1废票 2
题示
|| 注意:map 如果value是 0,就不会有key 。输出不出东西喔||||重複投票是为废票||3.||有人会投X,用int宣告出事||||名字跟姓氏之间有空格喔||
总之,感谢你看完这篇文章,如果有任何的错误或其他指教请告诉我喔~