set和multiset容器

news2024/10/5 15:26:51

1、基本概念

所有元素在插入时会自动排好序;

属于关联式容器,底层结构是用二叉树实现的

2、set和multiset的区别

set中不允许有重复元素,multiset允许有重复元素。

3、构造和赋值

构造:

set<T>st; //默认构造

set<const set &st>; //拷贝构造函数

赋值:

重载等号操作符 =

void printSet(set<int>&s)

{

    for (set<int>::iterator it = s.begin(); it != s.end(); it++)\

    {

        cout << *it << " ";

    }

    cout << endl;

}





void test01()

{

    set<int>s1;

    //插入数据只能用 insert

    s1.insert(10);

    s1.insert(20);

    s1.insert(5);

    s1.insert(20);

    printSet(s1);//5 10 20 自动排序 且去除重复元素

    set<int>s2(s1);//拷贝构造

    printSet(s2); //5 10 20

}

4、set大小和交换操作

set容器不能重新指定大小

函数原型:

size(); //返回容器中的元素格式

empty(); //判断是否为空

swap(); // 交换两个集合容器

void test02()

{

    set<int>s1;

    //插入数据只能用 insert

    s1.insert(1000);

    s1.insert(200);

    s1.insert(5);

    s1.insert(180);

    printSet(s1);//5 180 200 1000自动排序 且去除重复元素

    if (s1.empty())

    {

        cout << "为空" << endl;

    }

    else

    {

        cout << "不为空" << endl;

        cout << "容器大小为:" << s1.size() << endl;

    }

    set<int>s2;

    s2.insert(9999);

    s1.swap(s2);

    cout << "交换后:" << endl;

    printSet(s1);

}

4、set容器的插入与删除

函数原型:

clear();//清空

erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器

erase(beg,end); //删除区间[beg,end]的所有元素,返回下一个元素的迭代器

erase(elem); //删除容器中值为elem的元素

void test03()

{

    set<int>s1;

    //插入数据只能用 insert

    s1.insert(1000);

    s1.insert(200);

    s1.insert(5);

    s1.insert(180);

    printSet(s1);//5 180 200 1000自动排序 且去除重复元素

    set<int>::iterator it = s1.begin();

    it++; // 将it指向第二个元素

    set<int>::iterator it1 = s1.end();

    it1--; //指向倒数第二个元素

    set<int>::iterator a;

    a = s1.erase(it, it1); //预计返回指向最大元素的迭代器

    cout << "*a=" << *a << endl; //1000

    printSet(s1); //输出最大的元素和最小元素 5 1000

}

5、set容器的查找与统计

函数原型:

find(key); //查找key是否存在 若存在返回该键的元素的迭代器,若不存在,则返回set.end()

count(key); //统计key的个数 0或1

void test04()

{

    set<int>s1;

    s1.insert(1000);

    s1.insert(200);

    s1.insert(5);

    s1.insert(180);

    s1.insert(30);

    printSet(s1);//5 30 180 200 1000自动排序 且去除重复元素

    set<int>::iterator pos = s1.find(30);

    if (pos != s1.end())

    {

        cout << "找到了元素" << *pos << endl;

    }

    else

    {

        cout << "元素不存在" << endl;

    }

    int num = s1.count(180);

    if (num == 0)

    {

        cout << "元素不存在" << endl;

    }

    else

    {

        cout << "元素个数为:" << num << endl;

    }

}

6、set和multiset的区别

set在insert会给一个pair类型的返回结果,而multiset不会,multiset会返回一个迭代器。

void printMSet(multiset<int>&ms)

{

    for (multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)\

    {

        cout << *it << " ";

    }

    cout << endl;

}



void test05()

{

    set<int>s1;

    s1.insert(1000);

    s1.insert(200);

    pair<set<int>::iterator, bool>ret = s1.insert(10);

    if (ret.second == true)

    {

        cout << "插入成功!"<<endl;

    }

    else

    {

        cout << "插入失败" << endl;

    }

    ret = s1.insert(10);

    if (ret.second == true)

    {

        cout << "插入成功!" << endl;

    }

    else

    {

        cout << "插入失败"<<endl;

    }

    multiset<int>ms;

    ms.insert(10);

    ms.insert(10);

    printMSet(ms);//10 10

}

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

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

相关文章

Linux | 进程间通信 | 匿名管道 | 命名管道 | 模拟代码实现进程通信

文章目录进程通信的意义匿名管道通信原理管道的访问控制进程控制管道的特点命名管道进程通信的意义 之前聊进程时&#xff0c;讲过一个性质&#xff0c;即进程具有独立性&#xff0c;两个进程之间的交互频率是比较少的。就连父子进程也只是共享代码&#xff0c;修改父子进程中…

小程序云开发笔记一

一、什么是云开发&#xff1f; 微信官方云原生开发平台&#xff0c;腾讯云的各种能力加持&#xff0c;用云开发开发者可以节省大量的开发时间和运维成本。 二、云开发优势 无需运维&#xff0c;数据变大不需要管理&#xff0c; 弹性伸缩&#xff0c;业务量变大&#xff0c;服…

在一台电脑上安装多个python版本(小白教程)

我自己的办公电脑是64位&#xff0c;好几个同事的电脑还是win7&#xff0c;32位&#xff0c;因此我在写python办公自动化的时候还要考虑32位的python&#xff0c;因此在电脑上安装了两个版本的python&#xff0c;方便测试、打包使用 1、首先&#xff0c;下载两个python&#xf…

代码随想录算法训练营第七天|LeetCode 454. 四数相加 II 、383. 赎金信、 15. 三数之和、18. 四数之和

LeetCode 454. 四数相加 II 题目链接&#xff1a;454. 四数相加 II 分析&#xff1a; 本题比较简单&#xff0c;因为是无关的四个数组&#xff0c;所以不需要考虑去重&#xff0c;所以用哈希比较简单 思路&#xff1a; 定义个无序map先将nums1和nums2的和的数都存进去&…

单目标应用:世界杯优化算法(World Cup Optimization,WCO)求解单仓库多旅行商问题SD-MTSP(可更改旅行商个数及起点)

一、世界杯优化算法 世界杯优化算法&#xff08;World Cup Optimization&#xff0c;WCO)由Navid Razmjooy等人于2016年提出&#xff0c;该算法模拟了国际足联世界杯比赛&#xff0c;思路新颖&#xff0c;收敛速度快&#xff0c;全局寻优能力强。 算法原理参考&#xff1a;智…

[附源码]java毕业设计学生宿舍管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

新型智能优化算法——海鸥优化算法(基于Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

基于莱维飞行扰动策略的麻雀搜索算法(ISSA)(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【强化学习论文合集】ICML-2022 强化学习论文 | 2022年合集(二)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

[附源码]java毕业设计校园摄影爱好者交流网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

elasticsearch bucket 之rare terms聚合

文章目录1、背景2、需求3、前置准备3.1 准备mapping3.2 准备数据4、实现需求4.1 dsl4.2 java代码4.3 运行结果5、max_doc_count 和 search.max_buckets6、注意事项7、完整代码8、参考文档1、背景 我们知道当我们使用 terms聚合时&#xff0c;当修改默认顺序为_count asc时&…

nodejs+mysql+vscode网上图书商城销售管理系统vue

当前社会是一个网络高度发达的社会&#xff0c;人们都处在互联网时代中&#xff0c;对于知识的获取都是通过互联网&#xff0c;为了鼓励人们积极获取纸质知识&#xff0c;我想要设计一个网上图书售卖系统。这个系统设计的目的是为了方便人们们作为参考资料. 网上图书管理系统的…

【31-业务开发-基础业务-品牌管理-级联类别信息业务功能实现-品牌管理和商品分类管理俩者业务关联出现数据冗余,导致数据不同步的问题-开启事务-项目测试】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

进 4 球得 1 分,阿根廷败北背后的科技与狠活

内容一览&#xff1a;11 月 22 日&#xff0c;世界杯 C 组首场比赛&#xff0c;沙特阿拉伯 2:1 反超阿根廷&#xff0c;今天我们将逐一盘点阿根廷进 4 球得 1 分背后的科技与狠活。 关键词&#xff1a;世界杯 VAR 半自动越位技术 沙特爆冷逆袭&#xff0c;2:1 反超阿根廷 2022…

如何改进企业旧式工时管理系统?

工时管理系统对企业很重要&#xff0c;特别是那些不太明显的知识性工作的企业。 一些企业仍在使用基于纸张的工时表管理&#xff0c;这通常会带来以下问题&#xff1a; ● 过程非常耗时 ● 人为错误的风险很高 ● 有道德上的漏洞&#xff0c;如同伴帮打卡和时间盗窃 ● 数据处…

【强化学习论文合集】AAAI-2022 强化学习论文合集(附论文链接)

强化学习&#xff08;Reinforcement Learning, RL&#xff09;&#xff0c;又称再励学习、评价学习或增强学习&#xff0c;是机器学习的范式和方法论之一&#xff0c;用于描述和解决智能体&#xff08;agent&#xff09;在与环境的交互过程中通过学习策略以达成回报最大化或实现…

【测试沉思录】16. 性能测试中的系统资源分析之三:磁盘

作者&#xff1a;马海琴 编辑&#xff1a;毕小烦 三. 磁盘 磁盘是可以持久化存储的设备&#xff0c;根据存储介质的不同&#xff0c;常见磁盘可以分为两类&#xff1a;机械磁盘和固态磁盘。磁盘就像人的大脑皮层&#xff0c;负责数据的储存、记忆。 磁盘对于服务器来说十分重…

大学生静态HTML网页源码——佛山旅游景点介绍网页代码 家乡旅游网页制作模板 web前端期末大作业

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

学生个人网页模板 简单个人主页--贝聿铭人物介绍 6页带表单 带报告3800字

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | ‍个人博客网站 | ‍个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业…

c语言:初识指针(二)

初识指针一.野指针1.野指针形成原因一是&#xff1a;未初始化2.野指针形成原因二&#xff1a;指针越界3.野指针形成原因三&#xff1a;指针所指向的内存空间被释放二.指针的运算1.指针-整数运算2.指针-指针3.指针的关系运算三.指针和数组四.二级指针五.指针数组1.定义2.用一维数…