在 C++ 中检查 map 中是否存在某个键值

Jinku Hu 2023年1月30日 2021年6月28日
  1. 使用 std::map::find 函数检查 C++ map 中是否存在某个键
  2. 使用 std::map::count 函数检查 C++ map 中是否存在某个键值
  3. 使用 std::map::contains 函数检查 C++ map 中是否存在某个键值
在 C++ 中检查 map 中是否存在某个键值

本文将介绍如何在 C++ 中检查 map 中是否存在某个键。

使用 std::map::find 函数检查 C++ map 中是否存在某个键

std::map 容器是一个键值对的关联数据结构,按顺序存储,每个元素都有一个唯一的键。另一方面,STL 还提供了一个名为 std::unordered_map 的同一个容器的未排序版本。这两个容器都支持下面描述的关键字搜索方法。

findstd::map 容器的内置函数之一,它采用对应键值的单个参数进行搜索。该函数返回具有给定键值的元素的迭代器,否则返回尾后迭代器。在以下示例中,我们初始化 std::pair<string, string> 类型的 map,然后从传递给 find 函数的用户输入中获取键值。示例程序将肯定字符串输出到 cout 流。

#include <iostream>
#include <map>

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

int main(){
    string key_to_find;
    std::map<string, string> lang_map = {{"j", "Julia",},
                                         {"p", "Python",},
                                         {"m", "MATLAB",},
                                         {"o", "Octave",},
                                         {"s", "Scala",},
                                         {"l", "Lua",}};

    for (const auto & [key, value] : lang_map) {
        cout << key << " : " << value << endl;
    }

    cout << "Enter the key to search for: ";
    cin >> key_to_find;

    if (lang_map.find(key_to_find) != lang_map.end()) {
        cout << "Key Exists!" << endl;
    }

    return EXIT_SUCCESS;
}

输出:

j : Julia
l : Lua
m : MATLAB
o : Octave
p : Python
s : Scala
Enter the key to search for: l
Key Exists!

使用 std::map::count 函数检查 C++ map 中是否存在某个键值

或者,可以利用 std::map 容器的 count 内置函数来检查给定的键是否存在于 map 对象中。请注意,count 函数检索具有给定键值的元素的数量。如果没有找到键为 0 的元素,则返回值。因此,当给定的键存在于 map 对象中时,我们可以使用 count 函数调用作为 if 条件来输出确认字符串。

#include <iostream>
#include <map>

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

int main(){
    string key_to_find;
    std::map<string, string> lang_map = {{"j", "Julia",},
                                         {"p", "Python",},
                                         {"m", "MATLAB",},
                                         {"o", "Octave",},
                                         {"s", "Scala",},
                                         {"l", "Lua",}};

    cout << "Enter the key to search for: ";
    cin >> key_to_find;

    if (lang_map.count(key_to_find)) {
        cout << "Key Exists!" << endl;
    }

    return EXIT_SUCCESS;
}

输出:

Enter the key to search for: l
Key Exists!

使用 std::map::contains 函数检查 C++ map 中是否存在某个键值

contains 是另一个内置函数,可用于查找键是否存在于 map 中。如果具有给定键的元素存在于对象中,则此函数返回一个布尔值。请注意,本文中列出的所有三个函数都具有对数复杂度。

#include <iostream>
#include <map>

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

int main(){
    string key_to_find;
    std::map<string, string> lang_map = {{"j", "Julia",},
                                         {"p", "Python",},
                                         {"m", "MATLAB",},
                                         {"o", "Octave",},
                                         {"s", "Scala",},
                                         {"l", "Lua",}};

    cout << "Enter the key to search for: ";
    cin >> key_to_find;

    if (lang_map.contains(key_to_find)) {
        cout << "Key Exists!" << endl;
    }

    return EXIT_SUCCESS;
}

输出:

Enter the key to search for: l
Key Exists!
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - C++ Map