如何在 C++ Map 中查找密钥

  1. 使用 std::map::find 方法来查找地图中的一个键
  2. 使用 std::map::count 方法在地图中找到一个键
  3. 使用 std::map::contains 方法在 map 中查找一个键

本文解释了如何在在 C++ 中给定的 map 中找出一个指定的键是否存在。请注意,所有讨论的方法都有对数的时间复杂度。

使用 std::map::find 方法来查找地图中的一个键

为了查找特定的键,我们可以使用 find 方法,它遍历地图并返回相应的元素。如果没有找到给定键的元素,返回值就是 map.end() 迭代器。所以,我们利用这个特点,在 if 语句中比较两个迭代器值,并打印输出。

#include <iostream>
#include <map>

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

int main(){
    map<string, string> veggy_map = {{"a", "Asparagus",},
                                   {"b", "Beetroot",},
                                   {"g", "Ginger",},
                                   {"m", "Melon",},
                                   {"p", "Pumpkin",},
                                   {"s", "Spinach",}};
    string key_to_find = "m";

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

    return EXIT_SUCCESS;
}

输出:

Key Exists!

使用 std::map::count 方法在地图中找到一个键

另一种搜索特定键的方法是 count。这个函数计算与给定键相关联的元素数量。由于 std::map 容器不允许重复键,如果这个方法的返回值不等于零,我们可以认为问题的答案是肯定的。

#include <iostream>
#include <map>

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

int main(){
    map<string, string> veggy_map = {{"a", "Asparagus",},
                                   {"b", "Beetroot",},
                                   {"g", "Ginger",},
                                   {"m", "Melon",},
                                   {"p", "Pumpkin",},
                                   {"s", "Spinach",}};
    string key_to_find = "m";

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

    return EXIT_SUCCESS;
}

如果给定的容器是 multimap,你可以重用 count 方法的返回值,并将其作为多次循环迭代传递,如下例所示。

#include <iostream>
#include <map>

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

int main(){
    multimap<string, string> veggy_map = {{"a", "Asparagus",},
                                   {"b", "Beetroot",},
                                   {"b", "Broccoli",},
                                   {"g", "Ginger",},
                                   {"m", "Melon",},
                                   {"p", "Pumpkin",},
                                   {"s", "Spinach",}};
    string key_to_find = "b";

    auto ret = veggy_map.count(key_to_find);
    while (ret) {
        cout << "Key Exists!" << endl;
        ret -= 1;
    }

    return EXIT_SUCCESS;
}

输出:

Key Exists!
Key Exists!

使用 std::map::contains 方法在 map 中查找一个键

这个版本使用了 C++20 的 contains 方法,它最适合这项任务。如果在地图中找到指定的关键元素,该方法返回 true 布尔值。

#include <iostream>
#include <map>

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

int main(){
    map<string, string> veggy_map = {{"a", "Asparagus",},
                                   {"b", "Beetroot",},
                                   {"g", "Ginger",},
                                   {"m", "Melon",},
                                   {"p", "Pumpkin",},
                                   {"s", "Spinach",}};
    string key_to_find = "m";

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

    return EXIT_SUCCESS;
}
comments powered by Disqus