c ++如何对位集矢量进行排序?

时间:2015-10-23 12:24:53

标签: c++ sorting vector bitset

我的矢量为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

1 个答案:

答案 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(); });

Live Example

正如评论中所指出的,如果bitset足够小以适合unsigned long long,那么你可以使用std::bitset::to_ullong并比较unsigned long long而不是字符串。