加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何在std :: map声明中声明自定义排序函数?

发布时间:2020-12-16 09:43:24 所属栏目:百科 来源:网络整理
导读:容器std :: map总是根据键的值对键进行排序.是否可以对它进行排序,例如,在声明时设置的位数? 我有一个计数设置位的功能: for(size_t i = 0; i CHAR_BIT * sizeof value; ++i,value = 1) { if ((value 1) == byteState) ++num_bits;} 但是在声明地图时我不
容器std :: map总是根据键的值对键进行排序.是否可以对它进行排序,例如,在声明时设置的位数?

我有一个计数设置位的功能:

for(size_t i = 0; i < CHAR_BIT * sizeof value; ++i,value >>= 1) {
  if ((value & 1) == byteState) ++num_bits;
}

但是在声明地图时我不知道如何应用它:

std::map<int,int> myMap = {
  {1,2},{3,4},//...
}

我试图将它作为声明< int,int,decltype(countSetBits)>中的第三个参数,但没有运气.

解决方法

您需要将函数包装在二元运算符中,如下所示:

#include <iostream>
#include <map>
#include <algorithm>

int cntBits(int value) {
    int num_bits=0;
    for(size_t i = 0; i < 32 ; ++i,value >>= 1) {
        if ((value & 1) == 1) ++num_bits;
    }
    return num_bits;
}

struct cntBitsCmp {
    bool operator()(int a,int b) {
        return cntBits(a) < cntBits(b);
    }
};

现在您可以在声明中使用cntBitsCmp:

std::map<int,cntBitsCmp> myMap= {
    {128,...
};

这是一个demo on ideone.它在3之前正确地命令128,因为3有两个位设置,而128只有一个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读