关联容器笔记

news2024/11/5 14:39:28

关联容器总结

有序关联容器

键值的顺序自动排序,键值必须支持 < 操作符

底层数据结构
  • 使用平衡树,比如(红黑树
  • 增删查的平均时间复杂度接近 O(log⁡n)
种类
  • std::set:集合,包含唯一的键元素。

  • std::multiset:多重集合,允许键重复。

  • std::map:映射,键值对(键唯一,值可以重复)。

  • std::multimap:多重映射,允许键重复的键值对。

无序关联容器

底层数据结构
  • 链式哈希
  • 增删查的平均时间复杂度接近O(1)
种类
  • std::unordered_set:无序集合,包含唯一的键元素。
  • std::unordered_multiset:无序多重集合,允许键重复。
  • std::unordered_map:无序映射,键唯一。
  • std::unordered_multimap:无序多重映射,允许键重复。

方法

  • 插入操作

    • insert():在容器中插入元素,返回一个迭代器和一个布尔值(表示插入是否成功)。对于无序容器,可以传入 hint 迭代器提升效率。

    • emplace():在容器中原地构造元素,避免不必要的复制或移动操作。

  • 删除操作

    • erase():根据键或迭代器删除元素。返回已删除元素的数量。
  • 查找操作

    • find():返回一个指向指定键的迭代器,若键不存在则返回 end()
#include <iostream>
#include <map>
#include <unordered_set>

int main() {
    // std::map 示例
    std::map<int, std::string> m;

    // 插入元素
    m.insert(std::make_pair(1, "one"));
    m.emplace(2, "two");
    m[3] = "three";  // 使用下标操作符插入或更新元素

    // 查找元素
    auto it = m.find(1);
    if (it != m.end()) {
        std::cout << "Key 1 found with value: " << it->second << std::endl;  // 输出 "one"
    }
    else {
        std::cout << "Key 1 not found" << std::endl;
    }

    // 删除元素
    m.erase(2);  // 删除键为 2 的元素
    std::cout << "After erase, size of map: " << m.size() << std::endl;

    // 遍历元素
    std::cout << "Elements in map:" << std::endl;
    for (const auto& kv : m) {
        std::cout << kv.first << " => " << kv.second << std::endl;
    }

    // std::unordered_set 示例
    std::unordered_set<int> uset = { 1, 2, 3 };

    // 插入元素
    uset.insert(4);

    // 查找元素
    if (uset.find(3) != uset.end()) {
        std::cout << "Found 3 in unordered_set" << std::endl;
    }
    else {
        std::cout << "3 not found in unordered_set" << std::endl;
    }

    // 删除元素
    uset.erase(1);  // 删除元素 1
    std::cout << "After erase, size of unordered_set: " << uset.size() << std::endl;

    // 遍历元素
    std::cout << "Elements in unordered_set:" << std::endl;
    for (const auto& elem : uset) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

注:vector中push_back与emplace_back的区别

  • push_back会调用拷贝构造函数
  • emplace_back会调用构造函数原地构造对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2231589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息安全数学基础(43)理想和商环

理想&#xff08;Ideal&#xff09; 定义&#xff1a; 设R是一个环&#xff0c;I是R的一个非空子集。如果I满足以下条件&#xff0c;则称I为R的一个理想&#xff1a; 对于任意的r1, r2 ∈ I&#xff0c;有r1 - r2 ∈ I&#xff08;加法封闭性&#xff09;。对于任意的r ∈ I&am…

node.js下载、安装、设置国内镜像源(永久)(Windows11)

目录 node-v20.18.0-x64工具下载安装设置国内镜像源&#xff08;永久&#xff09; node-v20.18.0-x64 工具 系统&#xff1a;Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v20.18…

《JVM第3课》运行时数据区

无痛快速学习入门JVM&#xff0c;欢迎订阅本免费专栏 运行时数据区结构图如下&#xff1a; 可分为 5 个区域&#xff0c;分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用&#xff0c;会在后面的文章展开讲。 类加载子系统会把类信息…

苏州金龙新V系客车创新引领旅游出行未来

10月25日&#xff0c;为期三天的“2024第六届旅游出行大会”在风景秀丽的云南省丽江市落下帷幕。本次大会由中国旅游车船协会主办&#xff0c;全面展示了中国旅游出行行业最新发展动态和发展成就&#xff0c;为旅游行业带来全新发展动力。 在大会期间&#xff0c;备受瞩目的展车…

QML旋转选择器组件Tumbler

1. 介绍 Tumbler是一个用于创建旋转选择器的组件。它提供了一种直观的方式来让用户从一组选项中进行选择&#xff0c;类似于转盘式数字密码锁。网上找的类似网图如下&#xff1a; 在QML里&#xff0c;这种组件一共有两个版本&#xff0c;分别在QtQuick.Extras 1.4(旧)和QtQuic…

思科路由器静态路由配置

转载请注明出处 该实验为静态路由配置实验&#xff0c;仅供参考 选择三台2811路由器 关闭电源-安装模块-开启电源&#xff08;以R1为例&#xff0c;其他两台也是一样操作&#xff01;&#xff09; 连线。注意R1与R3之间、R3与R2之间用DCE串口线&#xff08;如下图&#xff09;…

闪存学习_2:Flash-Aware Computing from Jihong Kim

闪存学习_2&#xff1a;Flash-Aware Computing from Jihong Kim【1】 一、三个闪存可靠性问题二、内存的分类三、NAND 闪存和 NOR 闪存四、HDD和SSD比较Reference 一、三个闪存可靠性问题 耐性&#xff08;即寿命&#xff09;&#xff1a;最多能经受编程和擦除的次数。数据保留…

双指针问题解法集(一)

1.指针对撞问题&#xff08;利用有序数组的单调性衍生&#xff09; 1.1LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09;​​​​​​ 1.1.1题目解析 有序数组&#xff0c;找到和为price的两个元素&#xff0c;只需要一个解即可。 1.1.2算法…

深度学习(十):伦理与社会影响的深度剖析(10/10)

深度学习&#xff1a;伦理与社会影响的深度剖析 一、深度学习的伦理挑战 &#xff08;一&#xff09;数据隐私之忧 深度学习模型的训练往往需要大量数据&#xff0c;而数据的收集过程可能会侵犯个人隐私。例如&#xff0c;据统计&#xff0c;面部识别技术在全球范围内每天会收…

网络模型——二层转发原理

网课地址&#xff1a;网络模型_二层转发原理&#xff08;三&#xff09;_哔哩哔哩_bilibili 一、路由交换 网络&#xff1a;用来信息通信&#xff0c;信息共享的平台。 网络节点&#xff08;交换机&#xff0c;路由器&#xff0c;防火墙&#xff0c;AP&#xff09;介质&#…

探索NetCat:网络流量监测与数据传输的利器

从简单的数据传输到复杂的网络调试&#xff0c;NetCat的灵活性和多功能性让人赞叹不已&#xff0c;在这篇文章中我将深入探讨NetCat的魅力&#xff0c;揭示它的基本功能、实用技巧以及在日常工作中的应用场景&#xff0c;发现如何用这一小工具提升的网络技能与效率。 目录 Net…

提高交换网络可靠性之链路聚合

转载请注明出处 该实验为链路聚合的配置实验。 1.改名&#xff0c;分别将交换机1和交换机2改名为S1&#xff0c;S2&#xff0c;然后查看S1&#xff0c;S2的STP信息。以交换机1为例&#x1f447;。 2.交换机S1&#xff0c;S2上创建聚合端口&#xff0c;将端口加入聚合端口。以S…

Kubernetes:(三)Kubeadm搭建K8s 1.20集群

文章目录 一、Kubeadm安装流程二、实验1.环境准备2.所有节点安装kubeadm&#xff0c;kubelet和kubectl&#xff08;除了Harbor节点&#xff09;3.部署 Dashboard4.安装Harbor私有仓库 一、Kubeadm安装流程 集群名称IP地址安装软件master&#xff08;2C/4G&#xff0c;cpu核心数…

使用MongoDB Atlas构建无服务器数据库

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用MongoDB Atlas构建无服务器数据库 MongoDB Atlas 简介 注册账户 创建集群 配置网络 设置数据库用户 连接数据库 设计文档模式…

Windows 10 安装使用Docker踩过的坑和解决-31/10/2024

目录 环境版本 一、Docker Desktop双击启动没反应&#xff0c;open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、Docker Engine stopped/启动…

parted 磁盘分区

目录 磁盘格式磁盘分区文件系统挂载使用扩展 - parted、fdisk、gdisk 区别 磁盘格式 parted /dev/vdcmklabel gpt # 设置磁盘格式为GPT p # 打印磁盘信息此时磁盘格式设置完成&#xff01; 磁盘分区 开始分区&#xff1a; mkpart data_mysql # 分区名&…

论 ONLYOFFICE:开源办公套件的深度探索

公主请阅 引言第一部分&#xff1a;ONLYOFFICE 的历史背景1.1 开源软件的崛起1.2 ONLYOFFICE 的发展历程 第二部分&#xff1a;ONLYOFFICE 的核心功能2.1 文档处理2.2 电子表格2.3 演示文稿 第三部分&#xff1a;技术架构与兼容性3.1 技术架构3.2 兼容性 第四部分&#xff1a;部…

NVIDIA GeForce RTX 4090 Mobile 16G 性能分析

最近在看台式电脑&#xff0c;看到1W内居然能买到 i9-14900HX、RTX4090 16G&#xff0c;感觉不对劲&#xff0c;就离谱~ 4090的显卡什么时候出了16G的&#xff0c;而且还这这么便宜&#xff1f;&#xff1f;&#xff1f;&#xff1f; 目录 1、NVIDIA官网查查4090 2、对比RT…

【ARCGIS实验】地形特征线的提取

目录 一、提取不同位置的地形剖面线 二、将DEM转化为TIN 三、进行可视分析 四、进行山脊、山谷等特征线的提取 1、正负地形提取&#xff08;用于校正&#xff09; 2、山脊线提取 3、山谷线的提取 4、河网的提取 5、流域的分割 五、鞍部点的提取 1、背景 2、目的 3…

STM32使用串口下载程序

STM32使用串口下载程序 FluMcu软件下载地址 单片机在线编程网 STM32 MCU启动模式配置(Boot Configuration) 单片机复位后&#xff0c;SYSCLK的第4个上升沿&#xff0c;BOOT引脚上的值将锁存&#xff0c;用户可以通过设置BOOT0和BOOT1引脚的值&#xff0c;来选择复位后的启动…