Benutzerdefinierte Sortierfunktion für das STL-Pair-Template

C++C++Beginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labyrinth lernen Sie, wie Sie eine benutzerdefinierte Sortierfunktion für ein Paar-Template erstellen und sie in C++ mithilfe eines Vektors implementieren. Es wird vorausgesetzt, dass Sie bereits Kenntnisse über die Grundlagen der C++-Programmierung und das Konzept des Paar-Templates haben. Wenn Sie neu in diesen Themen sind, wird empfohlen, die entsprechenden Tutorials zu absolvieren, bevor Sie fortfahren.

Ein leerer Vektor erstellen und ihn mit Elementen füllen

Wir beginnen mit der Deklaration eines leeren Vektors von Paaren und füllen ihn anschließend mit einigen Elementen.
In diesem Schritt werden wir einen leeren Vektor erstellen.

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int main() {
  vector<pair<int, int>> v;

  return 0;
}

In diesem Code-Block haben wir lediglich die erforderlichen Header-Dateien inkludiert und einen leeren Vektor von Paaren deklariert.

Den Vektor mit Elementen füllen

Nachdem wir einen leeren Vektor erstellt haben, können wir ihm Elemente hinzufügen. Wir werden die Elemente mithilfe der push_back-Methode der Vektor-Klasse hinzufügen. In diesem Fall fügen wir Integer-Paare dem Vektor hinzu.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));

  return 0;
}

In diesem Code-Block fügen wir 5 Paare dem Vektor v hinzu.

Einen benutzerdefinierten Sortieralgorithmus erstellen

Um einen benutzerdefinierten Sortieralgorithmus zu erstellen, müssen wir zunächst eine Vergleichsfunktion definieren. Die Vergleichsfunktion wird zwei Paare vergleichen und einen booleschen Wert zurückgeben, der angibt, ob das erste Paar kleiner als das zweite Paar ist. In unserem Fall werden wir das erste Element jedes Paares vergleichen, und wenn diese gleich sind, werden wir die zweiten Elemente der Paare vergleichen.

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

In diesem Code-Block haben wir eine Vergleichsfunktion erstellt, die zwei Paare von ganzen Zahlen als Argumente nimmt und einen booleschen Wert basierend auf unseren angegebenen Bedingungen zurückgibt. Die Funktion vergleicht zunächst das erste Element jedes Paares. Wenn diese ungleich sind, gibt die Funktion das Ergebnis des Vergleichs zurück. Wenn sie gleich sind, vergleicht die Funktion das zweite Element des Paares und gibt das Ergebnis des Vergleichs zurück.

Verwenden Sie sort, um den Vektor zu sortieren

In diesem Schritt werden wir die Elemente im Vektor basierend auf der benutzerdefinierten Sortierfunktion sortieren, die wir im vorherigen Schritt erstellt haben. Um den Vektor zu sortieren, müssen wir die sort-Methode der STL mit dem Vektor als Argument aufrufen und die benutzerdefinierte Sortierfunktion als drittes Argument übergeben.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));


  sort(v.begin(), v.end(), cmp);

  return 0;
}

In diesem Code-Block haben wir den Vektor v mit der sort-Methode der STL sortiert. Wir haben die benutzerdefinierte Sortierfunktion cmp als drittes Argument übergeben.

Drucken Sie den sortierten Vektor

In diesem Schritt werden wir die sortierten Vektor-Elemente ausgeben. Wir werden über den Vektor mit einer for-Schleife iterieren und das erste und zweite Element jedes Paares ausgeben.

int main() {
  // previous code

  for (auto p : v)
  {
      cout << p.first << " " << p.second << endl;
  }
  return 0;
}

In diesem letzten Code-Block haben wir eine for-each-Schleife verwendet, um auf die Paare im Vektor zuzugreifen und sie in der Konsole auszugeben. Lassen Sie uns nun den Code ausführen, um die Ergebnisse zu sehen.

Führen Sie den Code aus

Um den Code auszuführen, müssen Sie ihn mit dem folgenden Befehl kompilieren:

g++ ~/project/main.cpp -o main &&./main

Nachdem Sie den Code ausgeführt haben, werden Sie die sortierten Paare in aufsteigender Reihenfolge gedruckt sehen.

Vollständiges Codebeispiel

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

int main() {
    vector<pair<int, int>> v;
    v.push_back(make_pair(1, 5));
    v.push_back(make_pair(1, 3));
    v.push_back(make_pair(2, 6));
    v.push_back(make_pair(2, 4));
    v.push_back(make_pair(5, 24));

    sort(v.begin(), v.end(), cmp);

    for (auto p : v)
    {
        cout << p.first << " " << p.second << endl;
    }
    return 0;
}

Zusammenfassung

In diesem Lab haben wir gelernt, wie man eine benutzerdefinierte Sortierfunktion für ein pair-Template erstellt und in C++ mit einem Vektor implementiert. Wir haben einen leeren Vektor erstellt, Elemente hinzugefügt, eine Vergleichsfunktion erstellt, die sort-Funktion verwendet, um die Elemente im Vektor mit unserer benutzerdefinierten Sortierfunktion zu sortieren und den sortierten Vektor gedruckt. Die benutzerdefinierte Sortierfunktion kann verwendet werden, um die Paare im Vektor basierend auf bestimmten Anforderungen oder Bedingungen zu sortieren, die wir im Code definieren.