菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C++ 教程

C++ 主页 C++ 简介 C++ 入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学 C++ 布尔值 C++ If...Else C++ Switch C++ While 循环 C++ For 循环 C++ Break/Continue C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 作用域 C++ 递归

C++ 类

C++ OOP C++ 类/对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++ 继承 C++ 多态 C++ 文件 C++ 异常 C++ 日期

C++ 数据结构

C++ 数据结构与 STL C++ Vectors C++ List C++ Stacks C++ Queues C++ Deque C++ Sets C++ Maps C++ 迭代器 C++ 算法

C++ How To

C++ 两数相加 C++ 随机数

C++ 参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 示例

C++ 示例 C++ 现实生活中的例子 C++ 编译器 C++ 练习 C++ 测验 C++ 证书


C++ Map


C++ Map

Map 存储“键/值”对的元素。

Map 中的元素

  • 可以通过键(而不是索引)访问,每个键都是唯一的。
  • 按键的升序自动排序。

要使用 Map,您必须包含 <map> 头文件

// 包含 map 库
#include <map>

创建 Map

要创建 Map,请使用 map 关键字,并在尖括号 <> 中指定键和值的**类型**。最后,指定 Map 的名称,例如:map<keytype, valuetype> mapName

示例

// 创建一个名为 people 的 Map,它将存储字符串作为键,整数作为值
map<string, int> people

如果您想在声明时就添加元素,请将它们放在花括号 {} 中,用逗号分隔的列表中

示例

// 创建一个 Map 来存储不同人的姓名和年龄
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

访问 Map

您无法像访问 数组向量那样,通过索引号来访问 Map 元素。

相反,您可以通过方括号 [] 中的键来访问 Map 元素

示例

// 创建一个 Map 来存储不同人的姓名和年龄
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 获取与键“John”关联的值
cout << "John is: " << people["John"] << "\n";

// 获取与键“Adele”关联的值
cout << "Adele is: " << people["Adele"] << "\n";
自己动手试一试 »

您还可以使用 .at() 函数访问元素

示例

// 创建一个 Map 来存储不同人的姓名和年龄
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

 // 获取与键“Adele”关联的值
cout << "Adele is: " << people.at("Adele") << "\n";

// 获取与键“Bo”关联的值
cout << "Bo is: " << people.at("Bo") << "\n";
自己动手试一试 »

注意:.at() 函数通常比方括号 [] 更受欢迎,因为它会在元素不存在时抛出错误消息

示例

// 创建一个 Map 来存储不同人的姓名和年龄
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 尝试访问一个不存在的元素(将抛出异常)
cout << people.at("Jenny");
自己动手试一试 »


更改值

您还可以更改与键关联的值

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 将 John 的值从 32 更改为 50
people["John"] = 50;

cout << "John is: " << people["John"];  // 现在输出 John is: 50
自己动手试一试 »

但是,使用 .at() 函数更安全

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 将 John 的值从 32 更改为 50
people.at("John") = 50;

cout << "John is: " << people.at("John");  // 现在输出 John is: 50
自己动手试一试 »

添加元素

要向 Map 添加元素,使用方括号 [] 是可以的

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 添加新元素
people["Jenny"] = 22;
people["Liam"] = 24;
people["Kasper"] = 20;
people["Anja"] = 30;
自己动手试一试 »

但您也可以使用 .insert() 函数

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 添加新元素
people.insert({"Jenny", 22});
people.insert({"Liam", 24});
people.insert({"Kasper", 20});
people.insert({"Anja", 30});
自己动手试一试 »

具有相同键的元素

Map 不能包含键相同的元素。

例如,如果我们尝试将“Jenny”添加到 Map 两次,它只会保留第一个

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 尝试添加两个键相同的元素
people.insert({"Jenny", 22});
people.insert({"Jenny", 30});
自己动手试一试 »

总结:值可以相同,但键必须唯一。


移除元素

要从 Map 中移除特定元素,可以使用 .erase() 函数

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 按键移除元素
people.erase("John");
自己动手试一试 »

要移除 Set 中的所有元素,可以使用 .clear() 函数

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

// 移除所有元素
people.clear();

获取 Map 的大小

要找出 Map 包含多少个元素,请使用 .size() 函数

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.size();  // 输出 3
自己动手试一试 »

检查 Map 是否为空

使用 .empty() 函数来查看 Map 是否为空。

.empty() 函数在 Map 为空时返回 1true),否则返回 0false

示例

map<string, int> people;
cout << people.empty(); // 输出 1 (Map 为空)
自己动手试一试 »

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.empty();  // 输出 0 (不为空)
自己动手试一试 »

注意:您还可以通过使用 .count(key) 函数来检查特定元素是否存在。

如果元素存在,它返回 1true),否则返回 0false

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.count("John");  // 输出 1 (John 存在)
自己动手试一试 »

遍历 Map

您可以使用 **for-each** 循环遍历 Map。但是,有几点需要注意

  • 您应该在 for 循环中使用 auto 关键字(在 C++11 版本中引入)。这允许编译器自动确定每个键值对的正确数据类型。
  • 由于 Map 元素包含键和值,您必须在循环中使用 .first 来访问键,并使用 .second 来访问值。
  • Map 中的元素按键的升序自动排序

示例

map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

for (auto person : people) {
  cout << person.first << " is: " << person.second << "\n";
}

输出将是:

Adele is: 45
Bo is: 29
John is: 32
自己动手试一试 »

如果您想反转顺序,可以在尖括号中使用 greater<type> 仿函数,如下所示

示例

map<string, int, greater<string>> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

for (auto person : people) {
  cout << person.first << " is: " << person.second << "\n";
}

输出将是:

John is: 32
Bo is: 29
Adele is: 45
自己动手试一试 »

提示:也可以使用 迭代器遍历 Map,这将在下一章中详细介绍。



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持