【问题标题】:c++ How to sort a vector of bitsets?c ++如何对位集的向量进行排序?
【发布时间】:2016-01-22 23:41:06
【问题描述】:

我有一个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::sort 与自定义比较器一起使用。
  • 感谢您的评论!你能解释一下,如何做到这一点?或者举个例子?
  • 尝试进行网络搜索。另外,请务必阅读有关排序功能的文档。

标签: c++ sorting vector bitset


【解决方案1】:

对std::bitset 进行排序的一种简单方法是使用std::bitset::to_string 将其转换为std::string,然后使用std::strings operator&lt; 来比较位集。

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

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

【讨论】:

  • @MooingDuck 完全同意,但 OP 想要比较 1024 位的位集,不能表示为 unsigned long long
  • 完全忽略了这一点。这使得to_ulong 代码更加复杂。好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
相关资源
最近更新 更多