キーの存在を確認する方法について
キーの存在を確認する方法には主に次の3つの関数を使った方法があります。
- contains(C++20以降)
- find
- 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はない