C++ set用法总结(整理)

2023-11-20

http://www.cplusplus.com/reference/set/set/insert/

顺序容器包括vector、deque、list、forward_list、array、string,所有顺序容器都提供了快速顺序访问元素的能力。

关联容器包括set、map

关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。

关联容器不支持顺序容器的位置相关的操作。原因是关联容器中元素是根据关键字存储的,这些操作对关联容器没有意义。而且,关联容器也不支持构造函数或插入操作这些接受一个元素值和一个数量值得操作。

关联容器支持高效的关键字查找和访问。两个主要的关联容器(associative container)类型是map和set。map中的元素是一些关键字----值(key--value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字:set支持高效的关键字查询操作----检查一个给定关键字是否在set中。

标准库提供set关联容器分为:

1,按关键字有序保存元素:set(关键字即值,即只保存关键字的容器);multiset(关键字可重复出现的set);

2,无序集合:unordered_set(用哈希函数组织的set);unordered_multiset(哈希组织的set,关键字可以重复出现)。

set就是关键字的简单集合。当只是想知道一个值是否存在时,set是最有用的。

在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。set中元素的值不能直接被改变。set内部采用的是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树。

set具备的两个特点:

  • set中的元素都是排序好的
  • set中的元素都是唯一的,没有重复的

set用法:

begin();            // 返回指向第一个元素的迭代器
end();              // 返回指向迭代器的最末尾处(即最后一个元素的下一个位置)
clear();            // 清除所有元素
count();            // 返回某个值元素的个数

empty();            // 如果集合为空,返回true

equal_range();      //返回集合中与给定值相等的上下限的两个迭代器

erase()–删除集合中的元素

find()–返回一个指向被查找到元素的迭代器

get_allocator()–返回集合的分配器

insert()–在集合中插入元素

lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器

key_comp()–返回一个用于元素间值比较的函数

max_size()–返回集合能容纳的元素的最大限值

rbegin()–返回指向集合中最后一个元素的反向迭代器

rend()–返回指向集合中第一个元素的反向迭代器

size()–集合中元素的数目

swap()–交换两个集合变量

upper_bound()–返回大于某个值元素的迭代器

value_comp()–返回一个用于比较元素间的值的函数

begin() and end()

// set::begin/end
#include <iostream>
#include <set>

int main ()
{
  int myints[] = {75,23,65,42,13};
  std::set<int> myset (myints, myints+5);

  std::cout << "myset contains:";
  for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
    std::cout << ' ' << *it;

  std::cout << '\n';

  return 0;
}

Output:
myset contains: 13 23 42 65 75

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ set用法总结(整理) 的相关文章

  • ScheduledThreadPoolExecutor周期定时任务异常处理踩坑的问题!!

    问题原因 在公司写项目的时候 有一个周期定时任务的需求 就想着阿里巴巴开发手册里不是说不能用Executors去创建线程池 因为存在如下问题 FixedThreadPool和SingleThreadPool 允许的请求队列长度为 Integ
  • NVME Format Command 个人笔记

    Format NVM command NVM Command Set Specific This command is used by the host to change the LBA data size and or metadata
  • 【图像压缩】QOI图像格式详解

    最近听说一种图像格式比较流行 想起我曾经是做图像压缩的emmmm 就来研究一下 QOI Quite OK Image Format 很好的图像格式 git链接 能快速地无损压缩图像 原理也非常简单 没有各种变换 直接空域处理 而无损压缩 自
  • linux入门系列20--Web服务之LNMP架构实战

    作为本入门系列最后一篇文章 将演示如何在CentOS7环境下搭建LNMP环境来构建个人博客网站 常见搭建网站的方式有LAMP LNMP IIS Nginx Tomcat等等 本文演示比较流行的基于LNMP方式来搭建动态WEB网站 正如前文
  • VScode配置C++(win11)以及Vscode的一些使用问题

    目录 一 下载VScode 省略 二 下载编译器 mingw 三 配置 vscode 四 补充 配置好后 输出中文会乱码 五 文件参数讲解 六 多文件编译 修改task json 七 中文问题 一 下载VScode 省略 二 下载编译器 m
  • 测试设计提升之路

    当前软件行业中有很多职位 其中开发与测试可以说是TOP2热门 测试相对开发来说入门容易 但要快速达到巅峰 我们需要掌握一些方法与套路 测试工作是一个繁琐的工作 一个人的精气神有限 在规定的时间内需要掌握多种技术 而且要达到精通非常困难 就测
  • java 使用匿名内部类的方式创建线程并设置和获取线程名字

    有些方法需要传入接口的实例或者抽象类的实例对象 比如Thread有一个构造方法 Thread Runnable target 这时可以可以自定义类实现Runnable接口 重写接口中的方法 将自定义类的对象传入构造方法中 也可以使用匿名内部
  • K8S学习--Kubeadm-7--Ansible二进制部署

    K8S学习 Kubeadm 安装 kubernetes 1 组件简介 K8S学习 Kubeadm 安装 kubernetes 2 安装部署 K8S学习 Kubeadm 3 dashboard部署和升级 K8S学习 Kubeadm 4 测试运
  • C++ 智能指针详解

    点击蓝字 关注我们 参考资料 C Primer中文版 第五版 我们知道除了静态内存和栈内存外 每个程序还有一个内存池 这部分内存被称为自由空间或者堆 程序用堆来存储动态分配的对象即那些在程序运行时分配的对象 当动态对象不再使用时 我们的代码
  • 查找数组中第二大的数

    快速找出一个数组中的最大数 第二大数 思路 如果当 前元素大于最大数 max 则让第二大数等于原来的最大数 max 再把当前元素的值赋给 max 如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值 则要把当前元素的值
  • 第6天-[21天学Python]-面向对象编程以及类的属性和方法

    本章的主要内容有 对象概述 类与对象 定义与使用类 类的属性与方法 类的继承 类的方法重载 1 面向对象编程 1 1 万物皆对象 程序对现实中的事物进行有目的的抽象 面向对象编程就是通过面向对象分析与设计 建立模型 类或对象 并完成最终程序
  • java代码上传本地图片返回地址

    有时候我也很迷这个到底是怎么上传的 写这篇为了给自己看的 大家可参照 Value constantvalue uploadPath private String uploadPath Value constantvalue hostname
  • 极大似然估计详解

    极大似然估计 以前多次接触过极大似然估计 但一直都不太明白到底什么原理 最近在看贝叶斯分类 对极大似然估计有了新的认识 总结如下 贝叶斯决策 首先来看贝叶斯分类 我们都知道经典的贝叶斯公式 其中 p w 为先验概率 表示每种类别分布的概率
  • 【源码+文档】爬虫检索系统

    实验内容 从Top250电影榜单上爬取所有电影的相关信息 包括影片海报 影片海报链接 影片中外文名 影片评分 影片评价人数 影片概况 影片缩略信息 例如 导演 部分演员 上映时间 电影类型等等 将海报以 jpg形式 将其他信息以excel文
  • 游戏币java_Java实现蓝桥杯分金币

    分金币 圆桌旁坐着n个人 每人有一定数量的金币 金币总数能被n整除 每个人可以给他左右相邻的人一些金币 最终使得每个人的金币数目相等 你的任务是求出被转手的金币数量的最小值 比如 n 4 且4个人的金币数量分别为1 2 5 4时 只需转移4
  • 【Antlr】ANTLR语法规则

    1 概述 ANTLR语法规则的主要工作是定义词法解析规则和语法解析规则 ANTLR约定词法解析规则以大写字母开头 语法解析规则以小写字母开头 下面简单介绍一下ANTLR的规则 首先需要定义Grammar类型及名称 名称必须和文件名一样 有L
  • 每日一题 337. 打家劫舍 III

    难度 中等 整体思路相当于是前两天的方法倒过来 毕竟二叉树最常用的解法就是递归倒推 对于每一颗子树 他必定有一种最大的盗取方法 但是只有它的 root 的盗取情况才会影响到 root 的父节点 即如果收益最大的盗取方法中不盗取 root 那
  • anaconda 2023.3 win10 安装,镜像配置,存储路径更改超详细教程

    现在 ai 很火 做 ai 开发 离不开 python anaconda 是 python 开发的重要工具 这里介绍一下 anaconda 最新版的 2023 3 在 win10 的安装 镜像配置 以及虚拟环境存储路径的更改 1 anaco

随机推荐

  • (48.4)【WAF绕过】SQL注入、文件上传、XSS

    目录 一 SQL注入绕过 二 文件上传绕过 三 xss绕过 一 SQL注入绕过 WAF绕过基础分析和原理 注入绕过WAF方法分析https blog csdn net qq 53079406 article details 12314769
  • 深度学习2015年文章整理(CVPR2015)

    国内外从事计算机视觉和图像处理相关领域的著名学者都以在三大顶级会议 ICCV CVPR和ECCV 上发表论文为荣 其影响力远胜于一般SCI期刊论文 这三大顶级学术会议论文也引领着未来的研究趋势 CVPR是主要的计算机视觉会议 可以把它看作是
  • 【JavaWeb】 练习二

    1 gt 实现登录 如果用户名密码错误 转入到登录页面 提示信息 用户名密码错误 2 gt 如果用户不登录 直接访问展示页面 也需要转入到登录页面 提示信息 请先登录在访问 3 gt 实现退出功能 转到登录页面 4 gt 统计查看展示页面的
  • 必杀VI、VIM编辑器命令

    题记 VI和VIM有非常多的命令 在此分部分展示一下 第一部分 一 移动光标类 一般模式 光标移动 复制粘贴 查找替换 上下移动 h lt 光标向左移动一个字符 j 向上箭头 光标向上移动一个字符 k 向下箭头 光标向下移动一个字符 l 向
  • Go_接口、多态、接口继承、空接口、类型断言

    接口 接口是把所有具有共性的方法定义在一起 是方法集 任何类型实现了接口中所有的方法 就是实现了这个接口 接口可以实现多态 接口传递的是地址值 接口定义及调用 定义格式 tepe 接口名 interface 方法名 参数 返回值 调用格式1
  • (超全面,超基础)Kriging插值推导理论笔记,算法,普通克里金

    最近老师让我再重新推导一下克里金插值的方法如何求出预测结果 于是我又无数次地打开了大神的推导原理过程链接 克里金 Kriging 插值的原理与公式推导 作者 xg1990 但是不可避免地在推导过程中 数学知识基础薄弱的我卡住在一些公式推导的
  • 【有奖调研】HarmonyOS新物种,鸿蒙流量新阵地——元服务邀你来答题!

    聊技术无话不谈 一起来吹吹元服务 畅聊你对元服务的想法 说不定 你就能撬动元服务的爆发增长 元服务 即原子化服务 是华为 轻量化 服务的新物种 可提供全新的服务和交互方式 让应用化繁为简 让服务触手可及 基于鸿蒙万能卡片 元服务可实现应用功
  • 数据同步算法研究

    数据同步算法研究 1 引言 基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍 比如远程数据镜像 备份 复制 同步 数据下载 上传 共享等等 最为简单的做法自然就是对数据进行完全复制 然而 数据在网络上来回被复制多次后就会存在大量
  • mysql connect 5.6_mysql5,mysql5.6,mysql5.7,mysql8设置autoReconnect=true解决连接数据库超时问m...

    1 问题现象 com mysql jdbc CommunicationsException The last packet successfully received from the server was58129 seconds ago
  • Windows下面Clang的调试方法

    虽然我们使用了Clang工具进行编译 但是我们依旧可以使用Visual Studio进行调试 方法如下 首先 我们需要将编译分为两个步骤 先在CMD使用clang进行obj的生成 也就是编译 clang cl c Z7 o helloeng
  • 8.8数据结构作业

    进制转换 int stack zhuanhuan Stackptr S datatype e if NULL S printf 转换失败 n return 0 datatype x 0 while e gt 0 x e 2 stack pu
  • 【星海出品】Django入门

    Django简述 blog blog init py 空文件 settings py 管理项目的配置信息 urls py 路由 声明请求url的映射关系 wsgi py python程序和web服务器的通信协议 manage py 一个命令
  • Github官网进不去怎么办?Github无法访问怎么办?

    GitHub是一个面向开源及私有软件项目的托管平台 超5千万程序员正在使用 也被戏称为全球最大同性交友网站 是程序员必备网站之一 GitHub能干什么 1 托管代码 历史版本管理 当然不仅仅是代码 任何文件都支持 不少人用GitHub来写博
  • Java while循环学习小结

    while循环先判断循环条件是否满足 再执行循环语句 while循环可能一次都不执行 编写循环时要注意循环条件 并避免死循环 具体内容扫描关注公众号
  • 企业微信内部跳转小程序

    企业微信中跳转小程序 企业微信官方文档 在企业微信内快速跳转到指定的小程序页面之前需要先调用wx agentConfig wx agentConfig corpid 必填 企业微信的corpid 必须与当前登录的企业一致 agentid 必
  • Unity打包WebGL的优化常用操作?

    1 贴图部分优化 如果贴图格式时2048 在不影响画面效果的情况下 改成1024或者5 12 还可以缩小包体 2 压缩和解压缩问题 WebGL打包的时候分三种压缩情况 gzip 比Brotli文件打 但打包快 http和https都支持 B
  • 管道

    管道 pipe 管道可用于具有亲缘关系进程间的通信 有名管道克服了管道没有名字的限制 因此 除具有管道所具有的功能外 它还允许无亲缘关系的进程间通信 实现机制 管道是由内核管理的一个缓冲区 相当于放入内存的一个纸条 管道的一端连接一个进程的
  • 什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试?

    什么是静态测试 动态测试 黑盒测试 白盒测试 测试 测试 静态测试是不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程 动态测试是实际运行被测程序 输入相应的测试实例 检查运行结果与预期结果的差异 判定执行结果是否符合要求 从
  • cmd下添加自定义命令

    问题 电脑是win10操作系统 安装的java是1 7版本 一般执行jar包就在cmd里cd到jar包所在目录 敲命令即可 java jar xxx jar 目前手头有个jar包小工具 是jdk1 8编译的 正好电脑里有jdk1 8的文件夹
  • C++ set用法总结(整理)

    http www cplusplus com reference set set insert 顺序容器包括vector deque list forward list array string 所有顺序容器都提供了快速顺序访问元素的能力