2015-10-23 12 views
5

Ich habe einen Vektor von bitsets:C++ Wie sortiere ich einen Vektor von Bitsets?

vector < bitset<1024> > myvector; 

Was ist der beste Weg, um diesen Vektor aus zu sortieren:

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

zu dieser Bestellung:

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

Ich habe bereits versucht, dies mit std zu tun: Art, aber es hat nicht funktionieren, weil std: sort den "<" - Operator verwendet, der nicht für Bitsets funktioniert.

Vielen Dank im Voraus für Ihre Hilfe! Irgendwelche Vorschläge oder Ideen werden sehr geschätzt!

EDIT:
Meine Frage ist anders Sorting a vector of custom objects, weil es unmöglich ist, "<" zu verwenden - Operator für bitset. Also meine Frage ist, welchen Operator kann ich stattdessen verwenden, um bitset zu vergleichen?

+6

Sie können std :: sort mit einem benutzerdefinierten Vergleicher verwenden. –

+0

Vielen Dank für Ihren Kommentar! Kannst du mir erklären, wie das geht? Oder geben Sie ein Beispiel? – NPa

+3

Versuchen Sie, eine Websuche durchzuführen. Lesen Sie auch die Dokumentation zur Sortierfunktion. –

Antwort

7

Eine einfache Möglichkeit, ein std::bitset wäre zu wandeln es in ein std::string mit std::bitset::to_string und dann std::string s operator< die Bitsets nutzen zu sortieren zu vergleichen.

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

Wie bereits in den Kommentaren, wenn das bitset klein genug ist, in eine unsigned long long passen, dann können Sie std::bitset::to_ullong und vergleichen Sie die unsigned long long s anstelle von Strings verwenden.

+0

@MooingDuck Stimmen völlig überein, aber das OP möchte Bitsets von 1024 Bits vergleichen, die nicht dargestellt werden können als 'unsigned long long' – NathanOliver

+0

Total übersehen. Das macht den 'to_ulong' Code viel komplizierter. In Ordung. –

+0

Vielen Dank! Das funktioniert großartig! – NPa

Verwandte Themen