STL中map結(jié)構(gòu)實(shí)際運(yùn)用時(shí),,有時(shí)需要我們通過(guò)<key,value>中的value來(lái)進(jìn)行排序而不是使用默認(rèn)的key,,由于value值是有可能重復(fù)的,,所以交換key和value不一定達(dá)到要求。這里我們可以通過(guò)使用vector來(lái)實(shí)現(xiàn)這一轉(zhuǎn)換:
1 把map結(jié)構(gòu)中的數(shù)據(jù)放到vector中
2 設(shè)置vector的排序算法來(lái)實(shí)現(xiàn)通過(guò)value排序
代碼如下:
18
#include<iostream>
19
#include<string>
20
#include<string.h>
21
#include<map>
22
#include<vector>
23
#include<algorithm>
24
25 using namespace std;
26
27 int cmp(const
pair<string,double>
&x,const
pair<string,double>
&y)
28 {
29
return x.second > y.second;
30 }
31
32 void
sortMapbyValue(map<string,double>
&t_map,vector<
pair<string,double> >
&t_vec)
33 {
34
for(map<string,double>::iterator iter
= t_map.begin();iter != t_map.end(); iter ++)
35
{
36
t_vec.push_back(make_pair(iter->first,iter->second));
37
}
38
39
sort(t_vec.begin(),t_vec.end(),cmp);
40 }
41
42 int main(void)
43 {
44
map<string,double> m_result;
45
vector<
pair<string,double> >
v_result;
46
47
m_result.insert(pair<string,double>("abc",20.33));
48
m_result.insert(pair<string,double>("abd",22.33));
49
m_result.insert(pair<string,double>("abe",21.33));
50
m_result.insert(pair<string,double>("abf",19.33));
51
52
cout<<"sort by key
:"<<endl<<endl;
53
for(map<string,double>::iterator iter
= m_result.begin(); iter != m_result.end(); iter++)
54
{
55
cout<<iter->first<<"\t\t"<<iter->second<<endl;
56
}
57
58
sortMapbyValue(m_result,v_result);
59
60
cout<<"sort by value
:"<<endl<<endl;
61
for(int i=0; i<v_result.size(); i++)
62
{
63
cout<<v_result[i].first<<"\t\t"<<v_result[i].second<<endl;
64
}
65
66 }
運(yùn)行結(jié)果:
參考: http://blog.csdn.net/wanpengcoder/article/details/5991792
|