共计 1964 个字符,预计需要花费 5 分钟才能阅读完成。
C++ map 是一种关联容器,它可以存储键值对的数据。map 的特点是,它的键是唯一的,而且是按照一定的顺序排列的。map 的底层实现是红黑树,所以它的插入、删除、查找等操作的时间复杂度都是 O(logn)。
要使用 map,首先需要包含头文件
#include
接下来,可以用以下几种方式向 map 中添加数据:
- 使用下标运算符 [],如果键不存在,则会创建一个新的键值对,并将值初始化为默认值。如果键已经存在,则会覆盖原来的值。例如:
m["Alice"] = 100; // 创建一个新的键值对,键为 "Alice",值为 100
m["Bob"] = 200; // 创建一个新的键值对,键为 "Bob",值为 200
m["Alice"] = 300; // 覆盖原来的值,将 "Alice" 对应的值改为 300
- 使用 insert() 函数,它可以接受一个 pair 对象或一个迭代器范围作为参数。如果键不存在,则会插入一个新的键值对。如果键已经存在,则不会做任何改变。例如:
m.insert(pair("Charlie", 400)); // 插入一个新的键值对,键为 "Charlie",值为 400
m.insert(pair("Alice", 500)); // 不会改变任何东西,因为 "Alice" 已经存在
- 使用 emplace() 函数,它可以直接传递键和值作为参数,而不需要创建 pair 对象。它的效果和 insert() 函数相同。例如:
m.emplace("David", 600); // 插入一个新的键值对,键为 "David",值为 600
m.emplace("Bob", 700); // 不会改变任何东西,因为 "Bob" 已经存在
要从 map 中删除数据,可以用以下几种方式:
- 使用 erase() 函数,它可以接受一个键或一个迭代器或一个迭代器范围作为参数。它会删除指定的键值对,并返回被删除的元素个数或者下一个有效的迭代器。例如:
m.erase("Alice"); // 删除 "Alice" 对应的键值对,并返回 1
m.erase(m.begin()); // 删除第一个键值对,并返回下一个有效的迭代器
m.erase(m.begin(), m.end()); // 删除所有的键值对,并返回尾后迭代器
- 使用 clear() 函数,它会清空整个 map,使其变成空容器。
要从 map 中查找数据,可以用以下几种方式:
- 使用 find() 函数,它可以接受一个键作为参数,并返回指向该键对应的元素的迭代器。如果没有找到该键,则返回尾后迭代器。例如:
auto it = m.find("Bob"); // 查找 "Bob" 对应的元素,并返回指向它的迭代器
if (it != m.end()) {cout first second
- 使用 count() 函数,它可以接受一个键作为参数,并返回该键在 map 中出现的次数。由于 map 中的键是唯一的,所以该函数只能返回 0 或 1。例如:
int n = m.count("Charlie"); // 查找 "Charlie" 在 map 中出现的次数,并返回它
if (n == 1) {cout
- 使用下标运算符 [],如果键存在,则返回对应的值的引用。如果键不存在,则会创建一个新的键值对,并将值初始化为默认值,并返回该值的引用。例如:
int x = m["David"]; // 查找 "David" 对应的值,并返回它,此时 x 为 600
int y = m["Eve"]; // 查找 "Eve" 对应的值,由于不存在,会创建一个新的键值对,键为 "Eve",值为 0,并返回该值的引用,此时 y 为 0
要遍历 map 中的数据,可以用以下几种方式:
- 使用迭代器,可以用 begin() 和 end() 函数获取 map 的首尾迭代器,然后用 ++ 运算符逐个访问每个元素。每个元素是一个 pair 对象,可以用 first 和 second 成员访问键和值。例如:
for (auto it = m.begin(); it != m.end(); ++it) {cout first second
- 使用范围 for 循环,可以直接遍历 map 中的每个元素。每个元素是一个 pair 对象,可以用 first 和 second 成员访问键和值。例如:
for (auto p : m) {cout
- 使用 for_each 算法,可以传递一个函数或者一个 lambda 表达式作为参数,对 map 中的每个元素进行操作。每个元素是一个 pair 对象,可以用 first 和 second 成员访问键和值。例如:
#include
// 定义一个函数,打印一个键值对
void print(pair p) {cout p) {cout
以上就是 C ++ map 的基本用法,希望对你有所帮助。
C++ 相关课程推荐 C++ 相关课程
原文地址: 如何在 C ++ 中使用键值对?c++map 介绍
正文完