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只有一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |