C++如何对一个bitset向量进行排序?

9

我有一个位集的向量:

vector < bitset<1024> > myvector;

从这个顺序:

0: xxx0100
1: xxx1100
2: xxx0010
3: xxx0001
...
...

到这个顺序的最佳排序方式是什么:

0: xxx0001
1: xxx0010
2: xxx0100
3: xxx1100
...
...

我已经尝试使用std:sort来做到这一点,但它没有成功,因为std:sort使用“<”- 运算符,而该运算符无法用于位集。
先感谢您的帮助!非常感谢任何建议或想法!
编辑: 我的问题与Sorting a vector of custom objects不同,因为对于bitset,不可能使用“<”- 运算符。所以我的问题是,我可以使用哪个运算符来比较bitset?

6
您可以使用自定义比较器与std::sort一起使用。 - Luchian Grigore
谢谢您的评论!您能解释一下,如何做到这一点吗?或者给个例子吗? - NPa
3
请尝试进行网页搜索,并确保阅读有关排序功能的文档。 - Ulrich Eckhardt
1个回答

11
一种简单的对 std::bitset 进行排序的方法是将其转换为一个 std::string,使用 std::bitset::to_string,然后使用 std::stringoperator< 来比较位集。
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来比较无符号长整型而不是字符串。


@MooingDuck 完全同意,但是原帖想要比较1024位的位集合,这不能表示为“unsigned long long”。 - NathanOliver
完全忽略了这一点。这使得 to_ulong 代码变得更加复杂。好的。 - Mooing Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接