在 C++ 中使用 std::map::find 函数

Jinku Hu 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++ 标准模板库中的关联容器之一,它实现了一个排序的数据结构,存储键值。请注意,键在 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!
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ Map