【C++】map详解

举报
William 发表于 2025/03/23 23:15:19 2025/03/23
【摘要】 【C++】map详解介绍map是C++标准模板库(STL)中的一种关联容器,用于存储键值对(key-value pairs)。其特点是键(key)唯一,且元素按键自动排序(默认升序)。map内部基于红黑树实现,因此查找、插入和删除操作的平均时间复杂度为O(log n)‌。应用使用场景字典或映射表‌:存储键值对,如学号与姓名的映射‌。配置管理‌:存储应用程序的配置参数,如数据库连接信息‌。缓存...

【C++】map详解
介绍

map是C++标准模板库(STL)中的一种关联容器,用于存储键值对(key-value pairs)。其特点是键(key)唯一,且元素按键自动排序(默认升序)。map内部基于红黑树实现,因此查找、插入和删除操作的平均时间复杂度为O(log n)‌。

应用使用场景
字典或映射表‌:存储键值对,如学号与姓名的映射‌。
配置管理‌:存储应用程序的配置参数,如数据库连接信息‌。
缓存机制‌:实现简单的缓存系统,存储频繁访问的数据‌。
唯一性约束‌:确保元素的唯一性,如存储用户ID‌。
不同场景下详细代码实现

场景一:字典或映射表‌

cpp
Copy Code
#include <iostream>
#include <map>
#include <string>

int main() {
std::map<int, std::string> studentMap;
studentMap‌:ml-citation{ref=“1” data=“citationList”} = “Alice”;
studentMap‌:ml-citation{ref=“2” data=“citationList”} = “Bob”;
studentMap‌:ml-citation{ref=“3” data=“citationList”} = “Charlie”;

for (const auto& pair : studentMap) {
    std::cout << "ID: " << pair.first << ", Name: " << pair.second << std::endl;
}
return 0;

}

场景二:配置管理‌

cpp
Copy Code
#include <iostream>
#include <map>
#include <string>

int main() {
std::map<std::string, std::string> config;
config[“DB_HOST”] = “localhost”;
config[“DB_PORT”] = “3306”;
config[“DB_USER”] = “root”;

std::cout << "DB_HOST: " << config["DB_HOST"] << std::endl;
return 0;

}

原理解释

map基于红黑树实现,红黑树是一种自平衡二叉搜索树,能够自动维护元素的排序和平衡性。插入、删除和查找操作通过红黑树的特性实现O(log n)的时间复杂度‌。

算法原理流程图
mermaid
Copy Code
graph TD
A[开始] --> B[插入键值对]
B --> C[查找插入位置]
C --> D[插入并平衡红黑树]
D --> E[结束]
A --> F[查找键值对]
F --> G[在红黑树中搜索]
G --> H[返回结果]
H --> E
A --> I[删除键值对]
I --> J[查找删除位置]
J --> K[删除并平衡红黑树]
K --> E

实际详细应用代码示例实现

示例:统计单词频率‌

cpp
Copy Code
#include <iostream>
#include <map>
#include <string>

int main() {
std::map<std::string, int> wordCount;
std::string word;
while (std::cin >> word) {
wordCount[word]++;
}

for (const auto& pair : wordCount) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;

}

测试步骤以及详细代码
插入测试‌:验证插入操作的正确性和性能。
查找测试‌:验证查找操作的正确性和性能。
删除测试‌:验证删除操作的正确性和性能。
遍历测试‌:验证遍历操作的正确性和性能。

测试代码示例‌

cpp
Copy Code
#include <iostream>
#include <map>
#include <string>
#include <chrono>

int main() {
std::map<int, std::string> testMap;
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 100000; ++i) {
testMap[i] = “value”;
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << “Insert time: " << std::chrono::duration_castchrono::milliseconds>(end - start).count() << " ms” << std::endl;

start = std::chrono::high_resolution_clock::now();
auto it = testMap.find(50000);
end = std::chrono::high_resolution_clock::now();
std::cout << "Find time: " << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() << " us" << std::endl;

return 0;

}

部署场景
高性能服务器‌:用于快速查找和存储数据‌。
游戏开发‌:存储游戏状态和玩家信息‌。
金融系统‌:存储交易记录和客户信息‌。

总结

map是C++中高效的键值对存储容器,基于红黑树实现,适用于需要快速查找和唯一性约束的场景。其插入、删除和查找操作的时间复杂度为O(log n),性能优异‌。

未来展望

随着C++标准的发展,map可能会进一步优化其性能,并增强对并发访问的支持。开发者可以期待更加高效和易用的map实现‌。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。