我的矢量为bitsets
:
vector < bitset<1024> > myvector;
对此向量进行排序的最佳方法是:
0:xxx0100
1:xxx1100
2:xxx0010
3:xxx0001
... ... ...
这个顺序:
0:xxx0001
1:xxx0010
2:xxx0100
3:xxx1100
... ... ...
我已经尝试使用std:sort执行此操作,但它不起作用,因为std:sort使用“&lt;” - 运算符,不适用于位集。
提前感谢您的帮助!非常感谢任何建议或想法!
修改
我的问题与Sorting a vector of custom objects不同,因为bitset
无法使用“&lt;” - 运算符。所以我的问题是,我可以使用哪个运算符来比较bitset
?
答案 0 :(得分:7)
对std::bitset
进行排序的一种简单方法是使用std::bitset::to_string
将其转换为std::string
,然后使用std::string
s operator<
来比较这些位集
std::vector<std::bitset<128>> data = {1000,2000,80000,15,6000,2};
std::sort(data.begin(), data.end(), [](const auto & lhs, const auto & rhs)
{ return lhs.to_string() < rhs.to_string(); });
正如评论中所指出的,如果bitset足够小以适合unsigned long long
,那么你可以使用std::bitset::to_ullong
并比较unsigned long long
而不是字符串。