2015-10-23 31 views
5

Mam wektor bitsets:C++ Jak sortować wektor bitsetów?

vector < bitset<1024> > myvector; 

Jaki jest najlepszy sposób, aby rozwiązać ten wektor z:

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

do tego celu:

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

ja już próbowałem to zrobić z std sort, ale nie działa, ponieważ std: sort używa operatora "<" - który nie działa dla bitsetów.

Z góry dziękuję za pomoc! Wszelkie sugestie i pomysły są mile widziane!

EDIT:
Moje pytanie jest inny Sorting a vector of custom objects, bo to jest niemożliwe, aby użyć "<" - operator dla bitset. Moje pytanie brzmi, który operator mogę zamiast tego porównać, aby porównać bitset?

+6

Możesz użyć std :: sort z niestandardowym komparatorem. –

+0

Dziękujemy za komentarz! Czy możesz mi wyjaśnić, jak to zrobić? Lub podać przykład? – NPa

+3

Spróbuj przeprowadzić wyszukiwanie w sieci. Należy również zapoznać się z dokumentacją dotyczącą funkcji sortowania. –

Odpowiedz

7

Prosty sposób sortowania std::bitset byłoby przekształcić go w std::string użyciu std::bitset::to_string a następnie użyć std::string s operator< porównać 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

jak wskazano w komentarzach jeśli bitset jest wystarczająco małe, aby zmieścić się w unsigned long long następnie można użyć std::bitset::to_ullong i porównać unsigned long long S zamiast strun.

+0

@MooingDuck Całkowicie zgadzam się, ale OP chce porównać bitsets 1024 bitów, które nie mogą być reprezentowane jako 'unsigned long long' – NathanOliver

+0

Zupełnie to przeoczyłem. To sprawia, że ​​kod 'to_ulong' jest znacznie bardziej skomplikowany. W porządku. –

+0

Dziękuję bardzo! Działa to świetnie! – NPa