对Map按value进行排序

 

Map内部是按key进行排序的,而不是value

如果希望根据valueMap里面的元素对排序,可以通过把Map里面的元素拷贝到一个list中,然后定义自己的比较函数,并对该list进行排序。

1)首先,需要定义一个结构体,以用于封装Map中的元素对(key, value)

struct strTest

{

    char key[32]; //key示例

    unsigned int value; //value示例

};

typedef std::list<stFunc> tpTestList;

tpTestList testList;

typedef std::map<char*, unsigned int> tpTestMap;

tpTestMap testMap;

(2)定义一个对结构体进行比较的函数

static bool xx_greater(strTest f1, strTest f2)

{

    return f1.value<f2.value;

}

(3)遍历map,将其元素拷贝到list中;使用上面定义的比较函数,直接调用list的sort方法,即可实现排序

/* copy map to a list, to enable sort by value

Example:

{{"key1",10},{"key2",2},{"key3",5}}

=>{{"key2",2},{" key3",5},{"key1",10}}

*/

static void xx_sort()

{

    testList.clear();

    tpTestMap::iterator pos;

    for (pos=testMap.begin(); pos!=testMap.end(); ++pos)

    {

       strTest test;

       strcpy(test.key, pos->first);

       test.value = pos->second;

       testList.push_back(test);

    }

    testList.sort(xx_greater);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值