c++中map的基本用法_c++ map容器键值映射详解

c++中的map是基于红黑树的关联容器,自动按键排序,支持O(log n)查找、插入和删除。需包含头文件<map>,定义为map<KeyType, ValueType>,可使用{}初始化。通过下标[]访问会自动创建默认值,insert()和emplace()更安全高效。查找用find()或count(),删除用erase()。元素按键升序排列,可用范围for或迭代器遍历。常用操作包括size()、empty()、clear()等。键类型需支持比较,自定义类型需提供比较规则。

c++中map的基本用法_c++ map容器键值映射详解

C++ 中的 map 是标准模板库(STL)中非常实用的关联容器,它以键值对(key-value pair)的形式存储数据,并自动根据键进行排序。map 的底层通常基于红黑树实现,因此查找、插入和删除操作的时间复杂度为 O(log n),适用于需要快速查找和有序遍历的场景。

map 的基本定义与初始化

要使用 map,需要包含头文件 <map>。其模板参数有两个:键类型(key)和值类型(value)。

基本语法:

map<KeyType, ValueType> variableName;

示例:

立即学习C++免费学习笔记(深入)”;

  • map<String, int> studentScores; —— 用姓名作为键,成绩作为值。
  • map<int, string> idToName; —— 用编号映射名字。

支持直接初始化(C++11 起):

map<string, int> scores = {{“Alice”, 95}, {“Bob”, 87}, {“Charlie”, 90}};

插入与访问元素

map 提供多种方式插入和访问键值对

  • 下标操作符 [ ]:通过键访问对应的值。若键不存在,则自动创建并用默认值初始化。
  • studentScores[“Alice”] = 95;
    cout << studentScores[“Alice”]; // 输出 95

  • insert() 方法:更安全地插入,避免意外创建元素。
  • studentScores.insert(make_pair(“David”, 88));
    // 或使用 { }
    studentScores.insert({“Eve”, 92});

  • emplace():原地构造,效率更高。
  • studentScores.emplace(“Frank”, 85);

注意:使用 [ ] 访问不存在的键会自动插入该键并赋予默认值(如 int 为 0),可能影响判断逻辑。

c++中map的基本用法_c++ map容器键值映射详解

艺映AI

艺映AI – 免费AI视频创作工具

c++中map的基本用法_c++ map容器键值映射详解62

查看详情 c++中map的基本用法_c++ map容器键值映射详解

查找与删除元素

map 提供了高效的查找方法:

  • find(key):返回指向该键值对的迭代器,未找到则返回 end()。
  • auto it = studentScores.find(“Alice”);
    if (it != studentScores.end()) {
    cout << “Score: ” << it->second;
    }

  • count(key):返回 1(存在)或 0(不存在)。map 中键唯一,所以最多返回 1。
  • if (studentScores.count(“Bob”)) {
    cout << “Bob exists”;
    }

删除元素使用 erase()

  • erase(key):按键删除。
  • erase(iterator):按迭代器删除。
  • studentScores.erase(“Bob”);
    studentScores.erase(it); // it 为有效迭代器

遍历 map

map 中的元素按键升序排列,可使用迭代器或范围 for 循环遍历:

for (const auto& pair : studentScores) {
cout << pair.first << “: ” << pair.second << endl;
}

也可使用传统迭代器:

for (auto it = studentScores.begin(); it != studentScores.end(); ++it) {
cout << it->first << ” -> ” << it->second << endl;
}

其他常用操作

  • size():返回元素个数。
  • empty():判断是否为空。
  • clear():清空所有元素。
  • begin()/end():获取首尾迭代器。

例如:

if (!studentScores.empty()) {
cout << “Total students: ” << studentScores.size();
}

基本上就这些。map 在处理键值映射时非常直观高效,掌握它的基本用法能显著提升 C++ 编程效率。注意键的类型必须支持比较操作(如 <),自定义类型需重载比较函数或提供比较器。不复杂但容易忽略细节。

上一篇
下一篇
text=ZqhQzanResources