当前位置: 首页 > news >正文

31、map deque list的实现原理【中高频】

文章目录

      • list:双向链表,适用于频繁在中间 插入和删除操作。在链表中,每个元素都有 指向前后元素的指针,所以 在任何位置进行插入和删除都非常高效。
      • deque:双端队列,可以在头部和尾部 快速插入和删除,适合 在头尾 都需要频繁增删数据的场景
      • map:键值对容器,类似于字典,它也是通过红黑树实现的,因此也是有序存储。适合需要快速查找键值对的场景,比如存储用户信息或用于配置文件读取等

list:双向链表,适用于频繁在中间 插入和删除操作。在链表中,每个元素都有 指向前后元素的指针,所以 在任何位置进行插入和删除都非常高效。

  • 高效插入和删除:在链表中的插入和删除时间复杂度为 (O(1)),不需要像 vector 一样移动其他元素。

  • 访问效率低:由于链表没有连续存储,不能通过索引直接访问某个元素。所以 必须从头或尾遍历,因此访问的效率低。

    在这里插入图片描述

deque:双端队列,可以在头部和尾部 快速插入和删除,适合 在头尾 都需要频繁增删数据的场景

  • 高效双端操作:无论是头部还是尾部插入/删除,时间复杂度均为 (O(1))。

  • 支持随机访问:deque 支持通过索引 直接访问元素,但它的底层存储结构并非一个连续的内存块,而是一个存储指针的数组,里面的每个元素都是指针,指向了内存中的小块连续的内存空间。这个指针数组从中间位置开始存储指针,留下首尾两端,从而便于扩容。
    在这里插入图片描述

    在这里插入图片描述

#include <deque>
#include <iostream>

int main() {
    std::deque<int> dq = {1, 2, 3};
    dq.push_front(0);  // 在头部添加元素 0
    dq.push_back(4);   // 在尾部添加元素 4

    // 遍历并输出元素
    for (int val : dq) {
        std::cout << val << " ";
    } // 输出 0 1 2 3 4
    return 0;
}

map:键值对容器,类似于字典,它也是通过红黑树实现的,因此也是有序存储。适合需要快速查找键值对的场景,比如存储用户信息或用于配置文件读取等

  • 有序存储:键值对按照键的顺序存储(所以map不能修改key的值,但可以修改value的值)

  • 键唯一:每个键都是唯一的(如果想保存多个相同的键,可以用multimap)

  • 查找高效:map 的查找、插入和删除操作的时间复杂度为 O(log n)。

    在这里插入图片描述

#include <map>
#include <iostream>

int main() {
    std::map<int, std::string> m = {{1, "one"}, {2, "two"}};
    m[3] = "three";  // 插入键值对 (3, "three")

    // 遍历并输出键值对
    for (auto& [key, value] : m) {
        std::cout << key << ": " << value << std::endl;
    }
    return 0;
}

相关文章:

  • DeepSeek 助力 C++ 开发:探索智能编程新境界
  • 数字电路 | 触发器 / 单稳态触发器 / 双稳态触发器
  • 【论文解读】Contrastive Learning for Compact Single Image Dehazing(AECR-Net)
  • 【Linux】从互斥原理到C++ RAII封装实践
  • 蓝桥每日打卡--背包问题
  • Dask:Python高效并行计算利器
  • 基于Asp.net的物流配送管理系统
  • 学习15天:pytest
  • redis工具类
  • OpenCV实现图像特征提取与匹配
  • 【论文阅读方法】沐神课程:如何读论文
  • C#—线程池详解
  • 下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?
  • DBeaver部分操作指南(数据库连接,构造ERD图,格式化SQL)
  • Navicat for Snowflake 震撼首发,激活数据仓库管理全新动能
  • SHAP值理论(二)
  • ffmpeg 添加毫秒时间戳
  • Spring 中 SmartInitializingSingleton 的作用和示例
  • 无需微调的对齐方法URIAL
  • Android安全支付-整体架构-KeyStore2-APP到Framework层的调用
  • 官方通报汕头违建豪宅“英之园”将强拆:对有关人员严肃追责问责
  • 小雨伞保险经纪母公司手回集团通过港交所聆讯
  • 俄乌官员即将在土耳其会谈,外交部:支持俄乌开启直接对话
  • 与总书记交流的上海人工智能实验室年轻人,在探索什么前沿领域?
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上