map可以實現key到value的一一映射,如果是一對多的,我們可以使用multimap
multimap<int,int>mp;
mp.insert(make_pair(first,second));
map默認是按照key值從小到大進行排序的,如果希望按照從大到小進行排序,可以使用
map<int,int,greater<int> >mp
如果我們期望按照自己定義的規則進行排序,那么可以自己寫一個排序類
#include<iostream> #include<cstdio> #include<map> using namespace std; struct cmp { bool operator()(const string &k1,const string &k2) { return k1.length()<k2.length(); } }; int main() { map<string,int,cmp >mp; mp["abc"]=100; mp["a"]=15; mp["dfdsa"]=45; map<string,int>::iterator it; for(it=mp.begin();it!=mp.end();it++) cout<<it->first<<" "<<it->second<<endl; }
那要如何才能實現對value的排序呢?我們想到使用sort函數,但是sort函數只能對線性的容器進行排序,所以我們需要先把map轉化成一個vector。map中的元素是一個pair
#include<iostream> #include<cstdio> #include<map> #include<vector> #include<algorithm> using namespace std; typedef pair<string,int>PAIR; bool cmp1(const PAIR &k1,const PAIR &k2) { return k1.second>k2.second; } struct cmp { bool operator()(const PAIR &k1,const PAIR &k2) { return k1.second>k2.second; } }; int main() { map<string,int>mp; mp["abc"]=100; mp["a"]=15; mp["dfdsa"]=45; vector<PAIR> v(mp.begin(),mp.end()); //sort(v.begin(),v.end(),cmp()); sort(v.begin(),v.end(),cmp1); for(int i=0;i<v.size();i++) cout<< v[i].first<<" "<<v[i].second <<endl; }