C++17: map & multimap—— 键值映射容器

mapmultimap 是 C++ STL 中键值对(key-value) 存储容器,底层基于红黑树 实现,会自动按键升序排序,查找效率高,适合需要有序存储键值对的场景。


一、核心知识点

1. 共性

  • 存储结构:pair<key, value>(键 + 值)
  • 排序规则:按键自动升序排序
  • 底层实现:红黑树
  • 查找 / 插入 / 删除效率:O(log n)
  • 头文件:#include <map>

2. 区别

  • map键唯一 ,不允许重复键,支持 [] 运算符访问
  • multimap键可重复 ,允许相同键对应多个值,不支持 []

二、常用操作函数

操作 功能
insert({key, val}) 插入键值对
find(key) 查找键,返回迭代器
erase(key) 删除指定键的所有元素
size() 获取元素个数
empty() 判断是否为空
clear() 清空容器

三、代码示例:map(键唯一)

cpp 复制代码
#include <iostream>
#include <map>
using namespace std;

int main() {
    // 1. 创建map:键int,值string
    map<int, string> mp;

    // 2. 插入数据(两种方式)
    mp[1] = "张三";
    mp[2] = "李四";
    mp.insert({3, "王五"});

    // 3. 键重复:会覆盖原有值
    mp[1] = "赵六";

    // 4. 遍历(按键自动升序)
    cout << "map遍历结果:" << endl;
    for (auto& p : mp) {
        cout << "键:" << p.first << ",值:" << p.second << endl;
    }

    // 5. 查找元素
    auto it = mp.find(2);
    if (it != mp.end()) {
        cout << "找到键2,值为:" << it->second << endl;
    }

    return 0;
}

//运行结果
map遍历结果:
键:1,值:赵六
键:2,值:李四
键:3,值:王五
找到键2,值为:李四

四、代码示例:multimap(键可重复)

cpp 复制代码
#include <iostream>
#include <map>
using namespace std;

int main() {
    // 1. 创建multimap
    multimap<int, string> mmp;

    // 2. 插入(支持重复键)
    mmp.insert({1, "苹果"});
    mmp.insert({1, "香蕉"});
    mmp.insert({2, "橙子"});

    // 3. 遍历(按键排序,重复键相邻)
    cout << "multimap遍历结果:" << endl;
    for (auto& p : mmp) {
        cout << "键:" << p.first << ",值:" << p.second << endl;
    }

    // 4. 统计重复键的个数
    cout << "键1的元素个数:" << mmp.count(1) << endl;

    return 0;
}
//运行结果
multimap遍历结果:
键:1,值:苹果
键:1,值:香蕉
键:2,值:橙子
键1的元素个数:2

五、总结

  1. map :有序、键唯一、支持 [],适合唯一键映射场景
  2. multimap :有序、键可重复、不支持 [],适合一对多映射场景
  3. 自动排序,查找稳定,适合对顺序有要求的场景
相关推荐
2501_931803754 分钟前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang
智者知已应修善业13 分钟前
【51单片机模拟生日蜡烛】2023-10-10
c++·经验分享·笔记·算法·51单片机
智者知已应修善业19 分钟前
【51单片机如何让LED灯从一亮到八,再从八亮到一】2023-10-13
c++·经验分享·笔记·算法·51单片机
qeen8728 分钟前
【数据结构】二叉树相关经典函数C语言实现
c语言·数据结构·c++·笔记·学习·算法·二叉树
geovindu33 分钟前
go: Interpreter Pattern
开发语言·设计模式·golang·解释器模式
小白学大数据1 小时前
面向大规模爬取:Python 全站链接爬虫优化(过滤 + 断点续爬)
开发语言·爬虫·python
良木生香1 小时前
【C++初阶】STL——List从入门到应用完全指南(1)
开发语言·数据结构·c++·程序人生·算法·蓝桥杯·学习方法
Alice-YUE1 小时前
【无标题】
开发语言·javascript·ecmascript
aqiu1111111 小时前
【并查集专题top】
c++·算法