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. 自动排序,查找稳定,适合对顺序有要求的场景
相关推荐
luj_17682 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
不听话坏2 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
likeyi073 小时前
require 和 import的区别
开发语言·前端
远离UE43 小时前
UE5 compute shader 原子加
开发语言·c++·ue5
C+-C资深大佬3 小时前
C++ 显式类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
KaMeidebaby4 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17684 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
取地址符5 小时前
C++学习笔记(基于learn-cxx)(1)
c++·经验分享·笔记·学习
Mininglamp_27185 小时前
Claude Code 封禁中国开发者之后:本地 AI 编程工具的替代方案实测
开发语言·人工智能·windows·开源软件·ai-native
思麟呀5 小时前
C++17(三)if constexpr+折叠表达式
开发语言·c++