C++,STL容器,map/multimap:映射/多重映射深入解析

请添加图片描述


一、容器概览

在C++标准模板库(STL)中,mapmultimap是两种重要的关联容器,它们基于红黑树实现,具有自动排序特性。这对容器适合需要快速查找和有序数据管理的场景。


核心特性对比

特性 map multimap
键唯一性 唯一 允许重复
插入效率 O(log n) O(log n)
查找效率 O(log n) O(log n)
迭代器稳定性 稳定 稳定
头文件 <map> <map>

二、底层实现原理

两种容器均采用红黑树(自平衡二叉查找树)实现,保证:

  • 插入/删除/查找时间复杂度O(log n)

  • 元素自动按键排序

  • 迭代遍历时有序输出


    // 红黑树节点基本结构示意
    struct RB_Node {
   
        bool color;
        Key key;
        Value value;
        RB_Node* left;
        RB_Node* right;
        RB_Node* parent;
    };

三、核心操作详解

1. 容器初始化

    // 默认构造
    map<string, int> wordCount;

    // 范围构造
    pair<const int, string> arr[] = {
   {
   1, "Apple"}, {
   2, "Banana"}};
    multimap<int, string> myMultiMap(begin(arr), end(arr));

    // 自定义比较函数
    struct CaseInsensitiveCompare {
   
        bool operator()(const string& a, const string& b) const {
   
            return lexicographical_compare(
                a.begin(), a.end(), b.begin(), b.end(),
                [](char c1, char c2) {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值