パープルハット

※当サイトではGoogleアドセンス広告を利用しています

C++ map キーの存在確認法3選(find, count, contains)


キーの存在を確認する方法について

キーの存在を確認する方法には主に次の3つの関数を使った方法があります。

  1. contains(C++20以降)
  2. find
  3. count

数字が小さいものほど使いやすいですが、1のcontainsはC++20以降でしか使えないという問題があります。
以降では、mpをmap型変数とします




1. containsを使った方法(C++20以降)

参考:map::contains - cpprefjp C++日本語リファレンス
mp.contains(Key)について、

  • true:Keyがある
  • false :Keyがない

とKeyの存在をチェックすることができます。
C++20以降の機能のようなので、コンパイラのバージョンに注意。

ソースコード

#include <iostream>
#include <map>

int main()
{
    std::map<std::string, int> mp = {
      {"A", 4},
      {"C", 5}
    };

    // KeyにAがあるか 
    if (mp.contains("A")) {
        std::cout << "Key = Aが存在" << std::endl;
    }
    else {
        std::cout << "Key = Aはない" << std::endl;
    }

    //KeyにWがあるか 
    if (mp.contains("W")) {
        std::cout << "Key = Wが存在" << std::endl;
    }
    else {
        std::cout << "Key = Wはない" << std::endl;
    }
}

実行結果

Key = Aが存在
Key = Wはない





2. countを使う場合

参考:map::count - cpprefjp C++日本語リファレンス

  • mp.count(Key)が1ならKeyがあり、0ならKeyがないと判断できます。
  • 「if(mp.count(Key) > 0)」としているサイトも多いですが「if(mp.count(Key))」でも同じ処理ができます。

ソースコード

#include <iostream>
#include <map>

int main()
{
    std::map<std::string, int> mp = {
      {"A", 4},
      {"C", 5}
    };

    // KeyにAがあるか 
    if (mp.count("A")) {
        std::cout << "Key = Aが存在" << std::endl;
    }
    else {
        std::cout << "Key = Aはない" << std::endl;
    }

    //KeyにWがあるか 
    if (mp.count("W")) {
        std::cout << "Key = Wが存在" << std::endl;
    }
    else {
        std::cout << "Key = Wはない" << std::endl;
    }
}

実行結果

Key = Aが存在
Key = Wはない





3. findを使う場合

参考:map::find - cpprefjp C++日本語リファレンス
mp.find(Key) != mp.end()について、

  • true:Keyがある
  • false :Keyがない

とKeyの存在を調べることができます。

ソースコード

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> mp = {
      {"A", 4},
      {"C", 5}
    };

    //KeyにAがあるか 
    std::map<std::string, int>::iterator  ite = mp.find("A");
    if (ite != mp.end()) {
        std::cout << "Key = Aが存在" << std::endl;
    }
    else {
        std::cout << "Key = Aはない" << std::endl;
    }

    //KeyにWがあるか 
    if (mp.find("W") != mp.end()) {
        std::cout << "Key = Wが存在" << std::endl;
    }
    else {
        std::cout << "Key = Wはない" << std::endl;
    }
}

実行結果

Key = Aが存在
Key = Wはない