写点什么

C++ 中 map 的使用方法

作者:向阳逐梦
  • 2023-07-12
    四川
  • 本文字数:2250 字

    阅读完需:约 7 分钟

C++中map的使用方法

C++中的 map 是一种关联容器,用于存储键值对。它提供了一种非常高效的方法来快速查找特定的值,并且允许我们根据键来排序和遍历数据。

C++中的 map

map 的介绍

map 是一种使用键值对的数据结构,它允许我们使用键来查找值。map 中的键必须是唯一且有序的,而值可以重复并且没有特定的顺序。

map 中的数据以树结构进行组织,其中每个节点都由一个键和一个值组成。根据键的大小,节点被插入到正确的位置以保持树的有序性。这使得在 map 中查找值非常高效,因为我们可以使用二分查找来快速定位值。

创建和初始化 map

我们可以使用 C++标准库中的 map 头文件来创建和初始化一个 map。以下示例展示了如何创建一个 map 并将几个键值对添加到其中:

#include <iostream>#include <map>
using namespace std;
int main(){ // 创建一个空的map map<int, string> myMap;
// 向map中添加键值对 myMap.insert(pair<int, string>(1, "apple")); myMap.insert(pair<int, string>(2, "banana")); myMap.insert(pair<int, string>(3, "cherry"));
// 输出map中的元素 for (auto it = myMap.begin(); it != myMap.end(); ++it) { cout << it->first << " : " << it->second << endl; } return 0;}
复制代码

输出:

1 : apple2 : banana3 : cherry
复制代码

在上面的示例中,我们首先创建了一个空的 map,然后使用 insert()函数将一些键值对添加到其中。最后,我们使用迭代器遍历该 map 并输出每个键值对。

我们还可以使用初始化列表来初始化 map。以下示例展示了如何使用初始化列表来创建并初始化一个 map:

map<string, int> myMap {    {"apple", 1},    {"banana", 2},    {"cherry", 3}};
复制代码

map 中的查找操作

向 map 中添加元素后,我们可以使用其键来查找相应的值。使用 find()方法可以在 map 中查找给定键的值。如果键存在,则 find()方法返回指向该元素的迭代器。否则,它将返回指向 map 结尾的迭代器。

以下示例展示了如何在 map 中查找值:

#include <iostream>#include <map>
using namespace std;
int main(){ map<string, int> myMap { {"apple", 1}, {"banana", 2}, {"cherry", 3} };
// 在map中查找元素 auto it = myMap.find("apple"); if (it != myMap.end()) { cout << "apple is found" << endl; } else { cout << "apple is not found" << endl; }
it = myMap.find("pear"); if (it != myMap.end()) { cout << "pear is found" << endl; } else { cout << "pear is not found" << endl; } return 0;}
复制代码

输出:

apple is foundpear is not found
复制代码

在上面的示例中,我们首先创建了一个 map 并向其中添加了一些键值对。然后,我们使用 find()方法在 map 中查找给定的键,如果找到则输出相应的消息。

map 的删除操作

我们可以使用 erase()方法从 map 中删除元素。erase()函数需要一个迭代器作为参数,可以使用 find()方法查找迭代器,然后使用 erase()方法来删除元素。以下示例展示了如何从 map 中删除特定键值对:

#include <iostream>#include <map>
using namespace std;
int main(){ map<string, int> myMap { {"apple", 1}, {"banana", 2}, {"cherry", 3} };
// 删除map中的某个元素 auto it = myMap.find("apple"); if (it != myMap.end()) { myMap.erase(it); }
// 输出map中的元素 for (auto it = myMap.begin(); it != myMap.end(); ++it) { cout << it->first << " : " << it->second << endl; } return 0;}
复制代码

输出:

banana : 2cherry : 3
复制代码

在上面的示例中,我们首先创建了一个 map 并向其中添加了一些键值对。然后,我们使用 find()方法查找要删除的元素

接下来我们来看看如何在 map 中遍历元素、如何使用自定义比较器排序 map,以及如何使用 lower_bound()和 upper_bound()方法进行范围查找。

使用 lower_bound()和 upper_bound()进行范围查找

我们可以使用 lower_bound()和 upper_bound()方法来查找 map 中一定范围内的键值对。lower_bound()函数返回指向第一个大于等于给定键的元素的迭代器,而 upper_bound()函数返回指向第一个大于给定键的元素的迭代器。

以下示例展示了如何使用 lower_bound()和 upper_bound()方法查找 map 中给定范围的键值对:

#include <iostream>#include <map>
using namespace std;
int main(){ map<string, int> myMap { {"apple", 1}, {"banana", 2}, {"cherry", 3}, {"date", 4}, {"elderberry", 5} };
// 查找范围内的元素 auto itlow = myMap.lower_bound("b"); auto itup = myMap.upper_bound("d");
// 输出找到的元素 for (auto it = itlow; it != itup; ++it) { cout << it->first << " : " << it->second << endl; } return 0;}
复制代码

输出:

banana : 2cherry : 3
复制代码

在上面的示例中,我们首先创建了一个 map 并向其中添加一些键值对。然后,我们使用 lower_bound()和 upper_bound()方法查找键值在范围内的元素。最后,我们遍历找到的元素并输出它们的键值对。

总结:

在本文中,我们了解了 C++中的 map。map 是一种关联容器,可以快速查找给定键的值。我们还展示了如何创建和初始化 map、如何在 map 中查找、删除元素、遍历 map 以及如何使用自定义比较器和范围查找方法。map 是 C++中非常有用和高效的数据结构,值得程序员们的深入学习和掌握。

发布于: 刚刚阅读数: 4
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022-06-01 加入

某公司芯片测试工程师,嵌入式开发工程师,InfoQ签约作者,阿里云星级博主,华为云·云享专家。座右铭:向着太阳,追逐梦想!

评论

发布
暂无评论
C++中map的使用方法_向阳逐梦_InfoQ写作社区