【『茴』的四种写法】 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; }