在工作中,经常需要对map中的内容进行排序,对map进行排序呢有两种情况 1 map内部本身就是按序存储的,在插入<key,value>时,就会按照key的大小顺序存储,当然key必须是能够进行大小比较运算的。map默认的排序是从小到大的,如果需要用到从大到小的顺序,那么访问的时候只需要: for(map<,>::iterator iter = m.end(); m != m.begin(); m-- ) { ....... } 即可,不需要再进行造轮子。
2 根据value排序,且value是一个struct: 上例子: typedef struct { int a; string b; } Test;
struct cmp
{
bool operator()(const pair<string,Test> &p1, const pair<string,Test> &p2)
{
return p1.second.a > p2.second.a; //降序 降序的话将 > 改成 <
}
};
void SortMapByValue(map<string,Test> &t_map,vector< pair<string,Test> >&t_vec )
{
for(map<string,Test>::iterator iter = t_map.begin();iter != t_map.end(); iter++)
{
t_vec.push_back(make_pair(iter->first,iter->second));
}
sort(t_vec.begin(),t_vec.end();cmp); //升序
}
这样就实现了对map中按照value进行排序啦