STL-set/multiset关联式容器

目录

一、常见接口

1.0 迭代器

1.1 构造函数

1.2 增删查

1.3 查找和统计

二、multiset

2.1 构造

2.2 查找

2.3 删除

2.4 统计


关联式容器是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。STL库中的set底层是基于红黑树实现的。

一、常见接口

详细解释与使用请参见官方网站:set - C++ Reference (cplusplus.com)

1.0 迭代器

迭代器是⼀个双向迭代器

// 正向迭代器
iterator begin();
iterator end();
// 反向迭代器
reverse_iterator rbegin();
reverse_iterator rend();

//遍历操作
void test1()
{set<int> s;s.insert(5);s.insert(2);s.insert(7);s.insert(3);s.insert(4);set<int>::iterator it = s.begin();while (it != s.end()){cout << *it << " ";it++;}
}

1.1 构造函数

构造:

  • set<T> st; //默认构造函数:

  • set(const set &st); //拷贝构造函数

  • set (InputIterator first, InputIterator last;//迭代器区间构造

  • set& operator=(const set &st); //重载赋值操作符

  • set (initializer_list<value_type> il); //列表构造

//构造
void test2()
{//initializerset<string> strset = { "sort", "insert", "add" };//拷贝set<string> str(strset);//迭代器区间set<int> s;s.insert(5);s.insert(2);s.insert(7);s.insert(3);s.insert(4);set<int> s1(s.begin(), s.end());
}

1.2 增删查

  • insert(elem); //在容器中插入元素。
  • clear(); //清除所有元素
  • erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
  • erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
  • erase(elem); //删除容器中值为elem的元素。
//删除
void test3()
{set<int> s = { 4,2,7,2,8,5,9 };for (auto e : s){cout << e << " ";}// 删除最⼩值s.erase(s.begin());for (auto e : s){cout << e << " ";}cout << endl;// 直接删除xint x;cin >> x;int num = s.erase(x);if (num == 0){cout << x << " 不存在!" << endl;}for (auto e : s){cout << e << " ";}cout << endl;//删除区间// 返回 >= 30auto itlow = s.lower_bound(3);// 返回 > 60auto itup = s.upper_bound(6);// 删除这段区间的值s.erase(itlow, itup);for (auto e : s){cout << e << " ";}cout << endl;
}

注意:

删除仍然会造成迭代器失效 

1.3 查找和统计

  • find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
  • count(key); //统计key的元素个数
//查找和统计
void test4()
{set<int> s1;//插入s1.insert(11);s1.insert(5);s1.insert(2);s1.insert(40);//查找set<int>::iterator pos = s1.find(30);if (pos != s1.end()){cout << "找到了元素 : " << *pos << endl;}else{cout << "未找到元素" << endl;}//统计int num = s1.count(2);cout << "num = " << num << endl;
}

 注意

set标准库不支持冗余值进入,count接口是为了与multiset类对称。但是在实际应用中,我们可以用count接口判断某个值是否存在,比起find判断存在来要更简单易用。

void test5()
{set<int> s;s.insert(5);s.insert(2);s.insert(7);s.insert(3);s.insert(4);int num = s.count(2);if (num)cout << "有" << endl;elsecout << "无" << endl;
}

二、multiset

multiset和set的使⽤基本完全类似,主要区别点在于multiset⽀持值冗余。

与set的接口相比,只在以下几个接口有区别

2.1 构造

void test6()
{// 相⽐ set 不同的是,multiset 是排序,但是不去重multiset<int> ms = { 4,2,7,2,4,8,4,5,4,9 };auto it = ms.begin();while (it != ms.end()){cout << *it << " ";++it;}cout << endl;
}

 

2.2 查找

void test6()
{// 相⽐ set 不同的是,x 可能会存在多个,find 查找中序的第⼀个multiset<int> ms = { 4,2,7,2,4,8,4,5,4,9 };int x;cin >> x;auto pos = ms.find(x);while (pos != ms.end() && *pos == x){cout << *pos << " ";++pos;}cout << endl;
}

 

2.3 删除

void test6()
{// 相⽐ set 不同的是,erase 给值时会删除所有的xmultiset<int> ms = { 4,2,7,2,4,8,4,5,4,9 };int x;cin >> x;ms.erase(x);for (auto e : ms){cout << e << " ";}cout << endl;
}

2.4 统计

void test6()
{// 相⽐ set 不同的是,erase 给值时会删除所有的xmultiset<int> ms = { 4,2,7,2,4,8,4,5,4,9 };int x;cin >> x;cout << ms.count(x) << endl;
}

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

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

相关文章

JSP分页功能实现案例:从基础到应用的全面解析

想要实现基于jsp的分页功能&#xff1a; 需要从数据库中获取数据&#xff0c;并在前端页面中分页展示 基于JDBC访问MySQL数据库&#xff0c;获取数据基于JSP处理数据并展示 本质上是JSP的一种开发模式&#xff08;即JSPJavaBean&#xff09; 第一步&#xff1a;创建JavaWeb项目…

gitlab 的CI/CD (二)

前言 上文完成了gitlab-runner的基础配置及将gitlab的制品上传至软件包库&#xff08;产品库&#xff09;的脚本编写&#xff1b; 本文实现gitlab的ci/cd对远程服务器的操作&#xff1b; 介绍 要让Gitlab Runner部署到远程机器&#xff0c;远程机器必须信任gitlab runner账…

C++标准库容器类——string类

引言 在c中&#xff0c;string类的引用极大地简化了字符串的操作和管理&#xff0c;相比 C 风格字符串&#xff08;char*或cahr[]&#xff09;&#xff0c;std::string 提供了更高效和更安全的字符串操作。接下来让我们一起来深入学习string类吧&#xff01; 1.string 的构造…

一种WLAN用户综合认证系统及其方法(本人专利号 201110408124.X)

一种WLAN用户综合认证系统及其方法(本人专利号 201110408124.X&#xff09; 本发明公开了一种WLAN用户综合认证系统及其方法&#xff0c;涉及移动通信技术领域。本系统包括WLAN终端与AP子系统和外部认证中心&#xff1b;设置有认证协议分析引擎单元和用户综合控制单元&#xff…

c/c++内存管理(详解) + new与delete的用法及底层

1:c/c内存分布情况 1.1:c/c内存的分布图 1.2:每个区域的用途及不同类型变量存储在那个区 1.3:例题讲解 2:c动态内存管理方式(new delete) 2.1:new的语法 2.2:delete的语法 3:operator new函数与operator delete函数 4:new与delete的实现原理 5:定位new表达式初识 6:mallo…

python+selenium实现自动联网认证,并实现断网重连

pythonselenium实现自动联网认证&#xff0c;并实现断网重连 echo off python “E:\autoD\auto_login.py” 要使自动登录脚本在系统重启后自动运行&#xff0c;你可以使用Windows的任务计划程序来设置。以下是详细的步骤&#xff1a; 1. 保存脚本 首先&#xff0c;将你的Py…

【高分系列卫星简介——高分二号卫星(GF-2)】

高分二号卫星&#xff08;GF-2&#xff09; 高分二号&#xff08;GF-2&#xff09;卫星是中国自主研制的首颗空间分辨率优于1米的民用光学遥感卫星&#xff0c;具有亚米级空间分辨率、高定位精度和快速姿态机动能力等特点&#xff0c;达到了国际先进水平。以下是对高分二号卫星…

对Spring-AI系列源码的讲解

前言 今天&#xff0c;我们将开启对Spring-AI系列源码的讲解。请大家不急不躁&#xff0c;我会逐步深入&#xff0c;每次专注于一个知识点&#xff0c;以防让人感到困惑。 首先&#xff0c;源码的讨论自然离不开自动装配。有人可能会问&#xff0c;之前已经讲解过这个内容了&…

【JavaSE】八种基本数据类型及包装类

数据类型字节数位数值范围包装类默认值整型byte18-128&#xff0c;127Byte0short216&#xff0c;Short0int432&#xff0c;Integer0long864&#xff0c;Long0L浮点型float432Float0.0fdouble864Double0.0d布尔型boolean18true falseBooleanfalse字符型char2160&#xff0c;Char…

C++编程语言:基础设施:异常处理(Bjarne Stroustrup)

第 13 章 异常处理(Exception Handling) 目录 13.1 错误处理(Error Handling) 13.1.1 异常(Exceptions) 13.1.2 传统错误处理(Traditional Error Handling) 13.1.3 探索(Muddling Through) 13.1.4 异常的替代观点(Alternative Views of Exceptions) 13.1.4.1 异步…

DAY78服务攻防-数据库安全RedisCouchDBH2database未授权访问CVE 漏洞

知识点&#xff1a; 1、数据库-Redis-未授权RCE&CVE 2、数据库-Couchdb-未授权RCE&CVE 3、数据库-H2database-未授权RCE&CVE 前置知识 1、复现环境&#xff1a;Vulfocus(官方在线的无法使用&#xff0c;需要自己本地搭建) 官方手册&#xff1a;https://fofapr…

老牛码看JAVA行业现状

一、坏消息深化与反思&#xff1a; 1、技术瓶颈与框架局限&#xff1a;尽管低代码平台崭露头角&#xff0c;为开发效率带来新气象&#xff0c;但其全面普及尚需时日&#xff0c;Java技术栈的进化似乎陷入了暂时的停滞。开发者们渴望突破&#xff0c;却发现传统框架与模式已难以…

博图V16升级V19前后内存对比

升级V19后固件版本更新到4.6 存储存储空间拓展50% 下图是官方解释 打开博图查看前后对比

[笔记]某变频器,功能列表及参数表

产品代号&#xff1a;INVT GOODDRIVE&#xff0c;这家公司我的产品我似乎在特检院看到过&#xff1f;或者在某个地铁建设工地看到过。是深圳的。 1.产品功能点&#xff1a; 变频锥形电机控制、抱闸转矩验证&#xff1f;抱闸反馈零位检测行程限位超载防护轻载升速&#xff08;…

【超详细】基于YOLOv8训练无人机视角Visdrone2019数据集

主要内容如下&#xff1a; 1、Visdrone2019数据集介绍 2、下载、制作YOLO格式训练集 3、模型训练及预测 4、Onnxruntime推理 运行环境&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff0c;torch1.12.0cu113&#xff08;要求>1.8&#xff09;&#xff0c…

8. 防火墙

8. 防火墙 (1) 防火墙的类型和结构 防火墙的类型和结构可以根据其在网络协议栈中的过滤层次和实现方式进行分类。常见的防火墙类型包括: 包过滤防火墙:工作在网络层(OSI模型的第3层),主要检查IP包头的信息,如源地址、目的地址、端口号等。电路级网关防火墙:工作在会话层…

idea2021git从dev分支合并到主分支master

1、新建分支 新建一个名称为dev的分支&#xff0c;切换到该分支下面&#xff0c;输入新内容 提交代码到dev分支的仓库 2、切换分支 切换到主分支&#xff0c;因为刚刚提交的分支在dev环境&#xff0c;所以master是没有 3、合并分支 点击push&#xff0c;将dev里面的代码合并到…

对时间序列SOTA模型Patch TST核心代码逻辑的解读

前言 Patch TST发表于ICLR23&#xff0c;其优势在于保留了局部语义信息&#xff1b;更低的计算和内存使用量&#xff1b;模型可以关注更长的历史信息&#xff0c;Patch TST显著提高了时序预测的准确性&#xff0c;Patch可以说已成为时序模型的基本操作。我在先前的一篇文章对P…

【掘金量化使用技巧】用日线合成长周期k线

掘金API中的接口最长的周期是‘1d’的&#xff0c;因此周线/月线/年线等数据需要自己进行合成。 基本思路 用日线合成长周期的k线只需要确定好合成的周期以及需要的数据即可。 周期: 一般行情软件上提供年k、月k、周k&#xff0c;我也选择年、月、周再加一个季度频率。 数据:…

Linux:终端(terminal)与终端管理器(agetty)

终端的设备文件 打开/dev目录可以发现其中有许多字符设备文件&#xff0c;例如对于我的RedHat操作系统&#xff0c;拥有tty0到tty59&#xff0c;它们是操作系统提供的终端设备。对于tty1-tty12使用ctrlaltF*可以进行快捷切换&#xff0c;下面的命令可以进行通用切换。 sudo ch…