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.
InformationsquelleAutor user3213711 | 2014-03-03
Schreibe einen Kommentar