STL ペアテンプレート用のカスタムソートメソッド

C++C++Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、C++ プログラミング言語を使って、ペア テンプレート用のカスタム ソート メソッドを作成し、ベクトルを使ってそれを実装する方法を学びます。この実験では、C++ プログラミングの基本とペア テンプレートの概念に関する事前知識があることを前提としています。これらのトピックに初めて触れる場合は、進む前に対応するチュートリアルを読むことをお勧めします。

空のベクトルを作成して要素で埋める

まず、ペアの空のベクトルを宣言し、それにいくつかの要素を入れます。
このステップでは、空のベクトルを作成します。

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

using namespace std;

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

  return 0;
}

このコード ブロックでは、必要なヘッダー ファイルを含め、ペアの空のベクトルを宣言しています。

ベクトルに要素を追加する

空のベクトルを作成した後、それに要素を追加できます。ベクトル クラスの push_back メソッドを使って要素を追加します。この場合、整数のペアをベクトルに追加しています。

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;
}

このコード ブロックでは、ベクトル v に 5 つのペアを追加しています。

カスタム ソート メソッドを作成する

カスタム ソート メソッドを作成するには、まず比較関数を定義する必要があります。比較関数は 2 つのペアを比較し、最初のペアが 2 番目のペアより小さいかどうかを示すブール値を返します。この場合、各ペアの最初の要素を比較し、それらが等しい場合は、ペアの 2 番目の要素を比較します。

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;
}

このコード ブロックでは、2 つの整数のペアを引数として取り、指定された条件に基づいてブール値を返す比較関数を作成しました。関数はまず各ペアの最初の要素を比較します。それらが等しくない場合、関数は比較の結果を返します。それらが等しい場合、関数はペアの 2 番目の要素を比較し、比較の結果を返します。

sort を使ってベクトルをソートする

このステップでは、前のステップで作成したカスタム ソート メソッドに基づいて、ベクトル内の要素をソートします。ベクトルをソートするには、STL の sort メソッドにベクトルを引数として渡し、カスタム ソート メソッドを 3 番目の引数として渡す必要があります。

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;
}

このコード ブロックでは、STL の sort メソッドを使ってベクトル v をソートしました。カスタム ソート メソッド cmp を 3 番目のパラメータとして渡しました。

ソート済みのベクトルを表示する

このステップでは、ソート済みのベクトル要素を表示します。for ループを使ってベクトルを反復処理し、各ペアの最初と 2 番目の要素を表示します。

int main() {
  // 前のコード

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

この最後のコード ブロックでは、for-each ループを使ってベクトル内のペアにアクセスし、コンソールに表示しました。では、コードを実行して結果を見てみましょう。

コードを実行する

コードを実行するには、次のコマンドを使ってコンパイルする必要があります。

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

コードを実行した後、ソート済みのペアが昇順に表示されます。

完全なコード例

#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;
}

まとめ

この実験では、C++ でペア テンプレート用のカスタム ソート メソッドを作成し、ベクトルを使って実装する方法を学びました。空のベクトルを作成し、そこに要素を追加し、比較関数を作成し、sort 関数を使ってカスタム ソート メソッドを使ってベクトル内の要素をソートし、ソート済みのベクトルを表示しました。カスタム ソート メソッドは、コードで定義する特定の要件または条件に基づいて、ベクトル内のペアをソートするために使用できます。