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

【C++】set

概念

 set是一种关联式容器,底层由红黑树组成,set通常用于key搜索场景的结构

声明

set的声明如下,T是底层关键字的类型

set默认要求T支持小于比较,如果输入的类型不支持或者想要根据自己的需求可以自行实现仿函数传给第二个模板参数

set底层储存数据的空间是从空间配置器申请的,有需要可以自己实现内存池,传给第三个参数

通常使用时不需要传后面两个模板参数

set的增删改查效率是O(logN),迭代器遍历走的是搜索树的中序遍历,是有序的

template < class T,                        // set::key_type/value_typeclass Compare = less<T>,        // set::key_compare/value_compareclass Alloc = allocator<T>      // set::allocator_type> class set;

构造和迭代器

无参默认构造

explicit set (const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());

迭代器区间构造

template <class InputIterator>set (InputIterator first, InputIterator last,const key_compare& comp = key_compare(),const allocator_type& = allocator_type());

拷贝构造

set (const set& x);

列表构造

set (initializer_list<value_type> il,const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());

迭代器是一个双向迭代器,包含正向和反向两种迭代器

iterator   -> a bidirectional iterator to const value_typeiterator begin();
iterator end();reverse_iterator rbegin();
reverse_iterator rend();

增删查

Member types
key_type   -> The first template parameter (T)
value_type -> The first template parameter (T)// 单个数据插⼊,如果已经存在则插⼊失败
pair<iterator,bool> insert (const value_type& val);// 列表插⼊,已经在容器中存在的值不会插⼊
void insert (initializer_list<value_type> il);// 迭代器区间插⼊,已经在容器中存在的值不会插⼊
template <class InputIterator>void insert (InputIterator first, InputIterator last);// 查找val,返回val所在的迭代器,没有找到返回end() 
iterator find (const value_type& val);// 查找val,返回Val的个数
size_type count (const value_type& val) const;// 删除⼀个迭代器位置的值
iterator  erase (const_iterator position);// 删除val,val不存在返回0,存在返回1 
size_type erase (const value_type& val);// 删除⼀段迭代器区间的值
iterator  erase (const_iterator first, const_iterator last);// 返回⼤于等val位置的迭代器
iterator lower_bound (const value_type& val) const;// 返回⼤于val位置的迭代器
iterator upper_bound (const value_type& val) const;

multiset和set的差异

multiset支持值冗余,但是set不支持

multiset 是排序,但是不去重

multiset中可能会存在多个同样的值, find 查找中序的第⼀个

multiset中count 会返回对应值的实际个数

multiset中erase 给值时会删除所有的对应值

http://www.lryc.cn/news/615344.html

相关文章:

  • AI热点周报(8.3~8.9):OpenAI重返开源,Anthropic放大招,Claude4.1、GPT5相继发布
  • 第二十八天(cookiesessiontokeny验证)
  • 李宏毅深度学习教程 第16-18章 终身学习+网络压缩+可解释性人工智能
  • STM32学习笔记6-TIM-2输出比较功能
  • 《汇编语言:基于X86处理器》第12章 复习题和练习
  • [每周一更]-(第155期):深入Go反射机制:架构师视角下的动态力量与工程智慧
  • 元宇宙技术如何改变社交方式?
  • (第三篇)spring cloud之Zookeeper注册中心
  • Go 实用指南:如何执行 Skyline 查询(Pareto 最优点筛选)
  • 图片拆分工具,自定义宫格切割
  • 在Spring Boot项目中如何动态切换数据源、数据库?
  • java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案
  • 【Git】Visual Studio 实现合并分支
  • Alibaba Cloud Linux 3 安装 git
  • DigitalProductId解密算法php调试版piddebug.php
  • n8n飞书webhook配置(飞书机器人、飞书bot、feishu bot)Crypto节点、js timestamp代码、Crypto node
  • AG32cpld实现一个UartTx“外设”
  • Kafka服务端NIO操作原理解析(二)
  • Arm Development Studio 安全通告:CVE-2025-7427
  • 人脸情绪检测数据集-9,400 张图片 智能客服系统 在线教育平台 心理健康监测 人机交互优化 市场研究与广告 安全监控系统
  • 【面试题】cookie和session 的区别
  • 【26】C#实战篇—— 多个线程函数对同一个 Excel 文件进行写操作引起的文件冲突问题,解决方法
  • Playwright C# 自动登录并上传 Excel 文件 的可运行示例
  • Irix HDR Pro:专业级 HDR 图像处理软件
  • Docker部署whisper转写模型
  • Java中Lambda表达式的常见用法和解析:从入门到实战
  • C/C++基础详解(二)
  • 【51单片机4按键启动停止向上向下流水灯】2022-10-26
  • 本文章分享一个本地录音和实时传输录音给app的功能(杰理)
  • 【c++】探秘Loop机制:C++中优雅的双向数据交互模式