2015-10-23 3 views
5

У меня есть вектор bitsets:C++ Как отсортировать вектор битов?

vector < bitset<1024> > myvector; 

Каков наилучший способ сортировки этот вектор из:

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

в таком порядке:

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

Я уже пытался сделать это с станд: то, но это не так работать, потому что std: sort использует оператор «<», который не работает для битов.

Заранее благодарим за вашу помощь! Любые предложения или идеи приветствуются!

EDIT:
Мой вопрос отличается от Sorting a vector of custom objects, потому что невозможно использовать "<" - оператор для bitset. Так что мой вопрос: какой оператор я могу использовать вместо этого, чтобы сравнить bitset?

+6

Вы можете использовать std :: sort с пользовательским компаратором. –

+0

Спасибо за ваш комментарий! Не могли бы вы объяснить мне, как это сделать? Или привести пример? – NPa

+3

Попробуйте сделать веб-поиск. Кроме того, убедитесь, что вы прочитали документацию, касающуюся функции сортировки. –

ответ

7

Простой способ сортировки std::bitset бы преобразовать его в std::string с помощью std::bitset::to_string, а затем использовать std::string s operator< сравнить bitsets.

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 с вместо строк.

+0

@MooingDuck Полностью согласен, но OP хочет сравнить биты с 1024 бит, которые не могут быть представлены как 'unsigned long long' – NathanOliver

+0

Абсолютно игнорируется. Это значительно усложняет код 'to_ulong'. Хорошо. –

+0

Большое спасибо! Это отлично работает! – NPa