Sortieren einer Liste von Vektoren lexikographisch nach Prioritäten
Sagen, dass ich eine Liste von Vektoren von Zeichenketten:
["a", "c", "Ente"]
["a", "a", "f"]
["Biene", "s", "xy"]
["b", "a", "a"]
Möchte ich zum Sortieren der Vektoren in dieser Weise:
erste Sortierung lexikographisch mit Bezug auf das element mit dem index 0, und wenn es eine Band gibt, wird es bestimmt lexikographisch mit Bezug auf das element mit dem index 1, und wenn es eine andere Band gibt, wird es bestimmt lexikographisch mit Bezug auf das element mit dem index 2.
Also die Liste oben, werden wie folgt nach der Sortierung:
["a", "a", "f"]
["a", "c", "Ente"]
["b", "a", "a"]
["Biene", "s", "xy"]
Wie kann ich das implementieren der standard-Bibliothek sort () - Funktion zu schreiben, die eine Methode zum Sortieren einer Liste von Vektoren, die gemäß der obigen Beschreibung? Ich bin mit C++.
Danke.
Es ist nicht schwer zu schreiben, die Funktion zum vergleichen einmal die Länge jedes Vektors bekannt ist. Aber was ist, wenn ich nicht weiß, die Länge der Vektoren (aber ich weiß immer, Sie sind von gleicher Länge)?
Compare-Funktion für Vektoren der Länge 3:
bool CompareVector(vector<string> first, vector<string> second){
if (first[0] < second[0])
return true;
if (first[1] < second[1])
return true;
if (first[2] < second[2])
return true;
return false;
}
Also für Vektoren der Länge n, gibt es n if-Anweisungen. Aber wie kann ich die Anzahl der if-Anweisungen eine variable?
Wie wäre es damit:
bool CompareVector(vector<string> first, vector<string> second){
for (int i=0; i< first.size(); i++)
if (first[i] < second[i])
return true;
return false;
}
Dann kann ich rufen Sie die standard-Sortierfunktion:
sort(vector<vector<string> >input.begin(), vector<vector<string> >input.end(), CompareVector() )
Würde das funktionieren? Danke.
- Erstens, Sie gehen zu müssen, um eine Natürliche Art Komparator für
std::string
. Dann ist es leicht. - Ich meine, ich will nicht zu umschreiben, ein Sortier-Algorithmus, sagen wir, merge-sort, da es bereits eingebaut. Aber irgendwie will ich es implementieren in meine Methode.
- Ich meine, muss ich wohl das festlegen einer Reihenfolge der Vektoren. Dann kann ich rufen Sie die sort () - Funktion aus der standard-Bibliothek, indem in der Bestellung. Aber wie kann ich definieren die Reihenfolge im code? Die Länge der Vektoren nicht immer 3. Aber alle diese Vektoren werden von der gleichen Länge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach anrufen
std::sort
wird das richtige tun. Es führt eine lexikographische Vergleich der einzelnen Elemente der Vektor-und dies ist rekursiv.Ausgabe:
auto
und die neue for-iterator. Sollte ich update mein Beispiel mit diesen features.Wäre dies ein Beispiel für die Implementierung:
Sehr einfach. Sie müssen erstellen Sie virtuelle Masse von Symbolen, und Sie müssen für die einzelnen Symbole, deren index-Nummern, form 1 bis N durch und vergleichen diese Indizes.
Wie diese:
Als gut, müssen Sie temporären Speicher.