【『茴』的四种写法】 C++11 map和unordered_map遍历方法
map和unordered_map的遍历方法是相同的,不过遍历结果,map是有序的,unoredred_map遍历是无序的。 std:map 是个有序的关系容器,其完整原型如下:
template< class Key, class T, class Compare=std::less<Key>, class Allocator=std::allocator<std::pair<const Key,T>> >class map;
键值对会根据键来用 Compare 排序,具体到 std::map<int, int> 就是:
map<int,int,std::less<int>>
一、迭代器 iterator
for(map<int,int>::iterator it=mp.begin();it!=mp.end();++it) cout<<it->first<<"--"<<it->second<<" "; for(map<int,int>::const_iterator it=mp.begin();it!=mp.end();++it) cout<<it->first<<"--"<<it->second<<" ";
二、类型萃取 (traits) value_type
for(map<int,int>::value_type& i:mp) cout<<i.first<<"--"<<i.second<<" ";
三、实际类型 pair
for(pair<const int ,int>&i:mp)//key必须是const的 cout<<i.first<<"--"<<i.second<<" ";
四、结构化绑定 auto
for(auto&[k,v]:mp)
cout<<k<<"--"<<v<<" ";
五、测试代码如下:
#include<iostream>
#include<thread>
#include<atomic>
#include<unordered_map>
#include<map>
using namespace std;
int main(){
map<int,int>mp;
for(int i=0;i<10;i++)mp[i]=i;
cout<<endl<<"iterator:"<<endl;
for(map<int,int>::iterator it=mp.begin();it!=mp.end();++it)
cout<<it->first<<"--"<<it->second<<" ";
cout<<endl<<"const iterator:"<<endl;
for(map<int,int>::const_iterator it=mp.begin();it!=mp.end();++it)
cout<<it->first<<"--"<<it->second<<" ";
cout<<endl<<"value_type :"<<endl;
for(map<int,int>::value_type& i:mp)
cout<<i.first<<"--"<<i.second<<" ";
cout<<endl<<"pair:"<<endl;
for(pair<const int ,int>&i:mp)
cout<<i.first<<"--"<<i.second<<" ";
cout<<endl<<"auto:"<<endl;
for(auto&[k,v]:mp)
cout<<k<<"--"<<v<<" ";
getchar();
return 0;
}
