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

ops/2025/3/19 14:02:28/

文章目录

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

list____12">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);  // 在头部添加元素 0dq.push_back(4);   // 在尾部添加元素 4// 遍历并输出元素for (int val : dq) {std::cout << val << " ";} // 输出 0 1 2 3 4return 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;
}


http://www.ppmy.cn/ops/167037.html

相关文章

平安养老险深圳分公司积极开展2025年“3·15”金融消费者权益保护教育宣传活动

为深刻把握金融工作的政治性、人民性&#xff0c;帮助社会公众增强维护自身合法权益的意识和能力&#xff0c;平安养老险深圳分公司在2025年3月7日至3月15日期间&#xff0c;以“保障金融权益&#xff0c;助力美好生活”为口号&#xff0c;聚焦“维护权益”主题&#xff0c;全面…

Vivo自带功能可以远程协助其他手机吗?vivo如何远程控制别的安卓手机

现在不少品牌的手机已经内置远程协助或远程控制功能&#xff0c;能够让一台手机远程操作另一台手机&#xff0c;对于上班族远距离快捷帮助家里长辈解决手机问题来说&#xff0c;非常便捷。 Vivo手机现在也有这项远程协助的内置功能。使用时&#xff0c;只要在控制端的vivo手机点…

Unity 获取Game窗口分辨率

方式1&#xff1a;调用api 直接调用&#xff1a;Handles.GetMainGameViewSize 方法2&#xff1a;反射 下载Unity源代码Github 查找GameView脚本:Editro/Mono/GameView/GameView.cs GameView脚本是内部类&#xff0c;继承PlayModeView,命名空间是UnityEditor PlayModeView继承…

群体智能优化算法-爱情进化算法 (Love Evolution Algorithm, LEA,含Matlab源代码)

摘要 爱情进化算法&#xff08;LEA&#xff09;是一种基于心理学刺激-价值-角色理论&#xff08;Stimulus-Value-Role Theory&#xff09;所提出的新型元启发式算法。该算法将“恋爱中的人”抽象为种群个体&#xff0c;通过对个体“幸福度&#xff08;Happiness&#xff09;”…

个人blog系统 前后端分离 前端js后端go

系统设计&#xff1a; 1.使用语言&#xff1a;前端使用vue&#xff0c;并使用axios向后端发送数据。后端使用的是go的gin框架&#xff0c;并使用grom连接数据库实现数据存储读取。 2.设计结构&#xff1a; 最终展示&#xff1a;仅展示添加模块&#xff0c;其他模块基本相似 前…

新闻发稿的核心定义与媒体发稿操作指南

新闻发稿是企业或机构通过媒体渠道发布具有新闻价值的内容&#xff0c;以传递信息、塑造品牌或回应社会关切。 操作四步法&#xff1a; 1.选题策划&#xff1a;挖掘企业动态、产品创新、行业洞察中的新闻点&#xff08;如技术突破、社会责任案例&#xff09;&#xff1b; 2.内…

通过 TTL 识别操作系统的原理详解

TTL 的工作原理 TTL&#xff08;Time to Live&#xff0c;生存时间&#xff09;是网络中用于控制数据包生命周期的一个关键参数。它通过限制数据包在网络中可以经过的最大路由跳数&#xff08;或最大转发时间&#xff09;&#xff0c;确保数据包不会在网络中无休止地转发。TTL…

基于PSO粒子群优化的XGBoost时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 XGBoost算法原理 4.2 XGBoost优化 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b 3.部分核心程序 &#xff08;完整版代码包含…