菜鸟教程 -- 学的不仅是技术,更是梦想!

C++ 教程
C++ 教程 C++ 简介 C++ 环境设置 C++ 基本语法 C++ 注释 C++ 数据类型 C++ 变量类型 C++ 变量作用域 C++ 常量 C++ 修饰符类型 C++ 存储类 C++ 运算符 C++ 循环 C++ 判断 C++ 函数 C++ 数字 C++ 数组 C++ 字符串 C++ 指针 C++ 引用 C++ 日期 & 时间 C++ 基本的输入输出 C++ 结构体(struct) C++ vector 容器 C++ 数据结构

C++ 面向对象

C++ 类 & 对象 C++ 继承 C++ 重载运算符和重载函数 C++ 多态 C++ 数据抽象 C++ 数据封装 C++ 接口(抽象类)

C++ 高级教程

C++ 文件和流 C++ 异常处理 C++ 动态内存 C++ 命名空间 C++ 模板 C++ 预处理器 C++ 信号处理 C++ 多线程 C++ Web 编程

C++ 资源库

C++ STL 教程 C++ 导入标准库 C++ 标准库 C++ 有用的资源 C++ 实例 C++ 测验 C++ <iostream> C++ <fstream> C++ <sstream> C++ <iomanip> C++ <array> C++ <vector> C++ <list> C++ <forward_list> C++ <deque> C++ <stack> C++ <queue> C++ <priority_queue> C++ <set> C++ <unordered_set> C++ <map> C++ <unordered_map> C++ <bitset> C++ <algorithm> C++ <iterator> C++ <functional> C++ <numeric> C++ <complex> C++ <valarray> C++ <cmath> C++ <string> C++ <regex> C++ <ctime> C++ <chrono> C++ <thread> C++ <mutex> C++ <condition_variable> C++ <future> C++ <atomic> C++ <type_traits> C++ <typeinfo> C++ <exception> C++ <stdexcept> C++ <cstdio> C++ <cstdint> C++ <memory> C++ <new> C++ <utility> C++ <random> C++ <locale> C++ <codecvt> C++ <cassert> C++ <cwchar> C++ <climits> C++ <cfloat> C++ <cstdlib> C++ <numbers> C++ OpenCV
(追記) (追記ここまで)

C++ 容器类 <map>

在 C++ 中,<map> 是标准模板库(STL)的一部分,它提供了一种关联容器,用于存储键值对(key-value pairs)。

map 容器中的元素是按照键的顺序自动排序的,这使得它非常适合需要快速查找和有序数据的场景。

定义和特性

  • 键值对:map 存储的是键值对,其中每个键都是唯一的。
  • 排序:map 中的元素按照键的顺序自动排序,通常是升序。
  • 唯一性:每个键在 map 中只能出现一次。
  • 双向迭代器:map 提供了双向迭代器,可以向前和向后遍历元素。

基本语法

包含头文件:

#include <map>

声明 map 容器:

std::map<key_type, value_type> myMap;
  • key_type 是键的类型。
  • value_type 是值的类型。

插入元素:

myMap[key] = value;

访问元素:

value = myMap[key];

遍历 map:

for (std::map<key_type, value_type>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
 std::cout << it->first << " => " << it->second << std::endl;
}

C++11 及以上标准,遍历部分可以简化为范围 for 循环,代码更简洁:

for (auto &p : m) {
 std::cout << p.first << " : " << p.second << std::endl;
}

实例

下面是一个使用 map 的简单实例,我们将创建一个 map 来存储员工的姓名和他们的年龄,并遍历这个 map 来打印每个员工的姓名和年龄。

实例

#include <iostream>#include <map>
#include <string>

int main() {
// 创建一个 map 容器,存储员工的姓名和年龄
std::map<std::string, int> employees;

// 插入员工信息
employees["Alice"] = 30;
employees["Bob"] = 25;
employees["Charlie"] = 35;

// 遍历 map 并打印员工信息
for (std::map<std::string, int>::iterator it = employees.begin(); it != employees.end(); ++it) {
std::cout << it->first << " is " << it->second << " years old." << std::endl;
}

return 0;
}

输出结果:

Alice is 30 years old.
Bob is 25 years old.
Charlie is 35 years old.

进阶用法

检查键是否存在:

if (myMap.find(key) != myMap.end()) {
 // 键存在
}

删除元素:

myMap.erase(key);

清空 map:

myMap.clear();

获取 map 的大小:

size_t size = myMap.size();

其他方法:

myMap.empty(); // 是否为空
myMap.count("Bob"); // key 是否存在(返回 0 或 1)

自定义排序,默认升序排序,可以用 std::greater 或自定义比较函数:

std::map<int, std::string, std::greater<int>> m; // 降序

使用自定义比较函数:

实例

#include <map>
#include <string>
#include <functional>

bool myCompare(const std::string& a, const std::string& b) {
return a < b;
}

int main() {
std::map<std::string, int, std::function<bool(const std::string&, const std::string&)>> myMap(myCompare);

// 其他操作...

return 0;
}

map 是 C++ STL 中一个非常有用的容器,特别适合需要快速查找和有序数据的场景。

实例

#include <iostream>
#include <map>
#include <string>

int main() {
std::map<std::string, int> scores;

// 插入
scores["Alice"] = 90;
scores["Bob"] = 85;
scores.insert({"Charlie", 92});

// 遍历
for (auto &p : scores) {
std::cout << p.first << " => " << p.second << std::endl;
}

// 查找
auto it = scores.find("Bob");
if (it != scores.end()) {
std::cout << "Bob's score: " << it->second << std::endl;
}

// 删除
scores.erase("Alice");

std::cout << "Size: " << scores.size() << std::endl;

return 0;
}

运行结果(自动按 key 排序):

Alice => 90
Bob => 85
Charlie => 92
Bob's score: 85
Size: 2
AI 思考中...

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /