c ++如何对位集向量进行排序?
c++ How to sort a vector of bitsets?
我有一个向量 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 使用“<”- 运算符,它不适用于位集。
在此先感谢您的帮助!非常感谢任何建议或想法!
编辑:
我的问题与 Sorting a vector of custom objects 不同,因为 bitset
不可能使用“<”- 运算符。所以我的问题是,我可以使用哪个运算符来比较 bitset
?
排序 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(); });
正如评论中指出的那样,如果位集足够小以适合 unsigned long long
,那么您可以使用 std::bitset::to_ullong
并比较 unsigned long long
而不是字符串。
我有一个向量 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 使用“<”- 运算符,它不适用于位集。
在此先感谢您的帮助!非常感谢任何建议或想法!
编辑:
我的问题与 Sorting a vector of custom objects 不同,因为 bitset
不可能使用“<”- 运算符。所以我的问题是,我可以使用哪个运算符来比较 bitset
?
排序 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(); });
正如评论中指出的那样,如果位集足够小以适合 unsigned long long
,那么您可以使用 std::bitset::to_ullong
并比较 unsigned long long
而不是字符串。