C++ で std::map::find 関数を使用する

胡金庫 2023年10月12日
  1. C++ で std::map::find 関数を使用して指定されたキー値を持つ要素を検索する
  2. contains メンバー関数を使用して、指定された要素が C++ のマップに存在するかどうかを確認する
C++ で std::map::find 関数を使用する

この記事では、C++ で std::map::find 関数とその代替機能を利用する方法について説明します。

C++ で std::map::find 関数を使用して指定されたキー値を持つ要素を検索する

std::map オブジェクトは、C++ 標準テンプレートライブラリの連想コンテナの 1つであり、キー値を格納するソートされたデータ構造を実装します。キーは std::map コンテナ内で一意であることに注意してください。したがって、既存のキーを使用して新しい要素を挿入した場合、操作は効果がありません。それでも、std::map クラスの一部の特別なメンバー関数は、キーが一致する場合、既存のペアに新しい値を割り当てることができます(例:insert_or_assign 関数)。

std::map コンテナの利点には、対数時間で実行できる高速な検索、挿入、および削除操作が含まれます。検索操作は、キーへの参照を受け入れる find メンバーによって提供されます。指定されたキーが std::map オブジェクトで見つかった場合、対応する要素へのイテレータが返されます。一方、指定されたキーがコンテナ内に見つからないとすると、過去のイテレータ(map::end())が返されます。

次のコードスニペットは、string ペアの map コンテナが任意の値で初期化され、次に"h"値を持つキーが検索される単純な使用シナリオを示しています。したがって、返されたイテレータを if-else ステートメントで処理して、要素ペアを出力するか、指定されたキーが見つからなかったというメッセージを出力します。

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  auto item = m1.find(key);
  if (item != m1.end()) {
    cout << "Key exists!  -  {" << item->first << ";" << item->second << "}\n";
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Key exists!  -  {h;htop}

contains メンバー関数を使用して、指定された要素が C++ のマップに存在するかどうかを確認する

指定された値のペアが map オブジェクトに存在するかどうかをユーザーが確認する必要がある場合は、メンバー関数 contains を利用できます。この関数は、C++ 20 バージョンから std::map コンテナの一部であるため、次のコードスニペットを実行するにはコンパイラのバージョンを知っている必要があります。contains 関数はキーへの参照を取得し、見つかった場合は booltrue を返します。このメンバー関数の時間計算量も対数です。

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.contains(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Key Exists!

または、cout メンバー関数を使用して、指定されたキーを持つ要素ペアが map に存在するかどうかを確認することもできます。通常、cout 関数は、指定されたキーを持つ要素の数を取得するために使用されますが、std::map は一意のキー値のみを格納するため、要素が見つかった場合、プロセスは 1 を返します。それ以外の場合は、要素が見つからなかったことを示すゼロ値が返されます。

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.count(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Key Exists!
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Map