【C++】19___set / multiset 容器

目录

一、set基本概念

二、set构造和赋值

三、set大小和交换

四、set插入和删除

五、set查找和统计

六、set和multiset区别

七、pair对组创建


一、set基本概念

所有元素都会在插入时自动被排序

本质:set / multiset属于关联式容器,底层结构是用二叉树实现。

set和multiset区别:

  • set不允许容器中有重复的元素
  • multiset允许容器中有重复的元素

二、set构造和赋值

构造:

  • set<T>st;  //默认构造函数
  • set(const set &st);  //拷贝构造函数

赋值:

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

代码示例 

#include<iostream>
using namespace std;
#include<set>void printS(set<int>s){for(set<int>::iterator it = s.begin();it!=s.end();it++){cout<< *it <<" ";}cout<<endl;
}void test(){set<int>s;s.insert(3);s.insert(2);s.insert(5);s.insert(1);s.insert(4);printS(s); //1 2 3 4 5s.insert(4);printS(s); //1 2 3 4 5 插入重复的数不会报错,但不会打印出来set<int>s1(s);printS(s1);//1 2 3 4 5set<int>s2;s2 = s1;printS(s2);//1 2 3 4 5
}int main(){test();return 0;
}

三、set大小和交换

函数原型:

  • size();  //返回容器中元素的数目
  • empty();  //判断容器是否为空
  • swap(st);   //交换两个集合容器

代码示例 

#include<iostream>
using namespace std;
#include<set>void printS(set<int>s){for(set<int>::iterator it = s.begin();it!=s.end();it++){cout<< *it <<" ";}cout<<endl;
}void test(){set<int>s;s.insert(3);s.insert(2);s.insert(5);s.insert(1);s.insert(4);if(s.empty()){cout<<"s为空"<<endl;}else{cout<<"s不为空"<<endl;cout<<"s中元素个数为:"<<s.size()<<endl;}set<int>s1;s1.insert(6);s1.insert(8);s1.insert(7);s1.insert(10);s1.insert(9);cout<<"交换前:"<<endl;printS(s);printS(s1);cout<<"交换后:"<<endl;s.swap(s1);printS(s);printS(s1);
}int main(){test();return 0;
}

四、set插入和删除

函数原型:

  • insert(elem);  //在容器中插入元素
  • clear();  //清除所有元素
  • erase(pos);  //删除pos迭代器所指的元素,返回下一个元素的迭代器
  • erase(beg , end);  //删除区间[beg , end)的所有元素,返回下一个元素的迭代器
  • erase(elem);  //删除容器中的值为elem的元素

 代码示例

#include<iostream>
using namespace std;
#include<set>void printS(set<int>s){for(set<int>::iterator it = s.begin();it!=s.end();it++){cout<< *it <<" ";}cout<<endl;
}void test(){set<int>s;s.insert(3);s.insert(2);s.insert(5);s.insert(1);s.insert(4);printS(s);//1 2 3 4 5s.erase(s.begin());printS(s);//2 3 4 5s.erase(4);printS(s);//2 3 5//清空
//	s.clear();s.erase(s.begin() , s.end());printS(s);
}int main(){test();return 0;
}

五、set查找和统计

函数原型:

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

 代码示例

#include<iostream>
using namespace std;
#include<set>void printS(set<int>s){for(set<int>::iterator it = s.begin();it!=s.end();it++){cout<< *it <<" ";}cout<<endl;
}void test(){set<int>s;s.insert(3);s.insert(2);s.insert(4);s.insert(1);s.insert(4);printS(s);//1 2 3 4 5set<int>::iterator it = s.find(3);if(it != s.end()){cout<<"找到了"<<*it<<endl;}else{cout<<"没找到"<<endl;}int num = s.count(4);//只会出现1和0cout<<"num="<<num<<endl;
}int main(){test();return 0;
}

六、set和multiset区别

区别:

  • set不可以插入重复数据,而multiset可以
  • set插入数据的同时回返回插入的结果,表示插入是否成功
  • multiset不会检测数据,因此可以插入重复数据

代码示例 

#include<iostream>
using namespace std;
#include<set>void test(){set<int>s;pair<set<int>::iterator , bool> S = s.insert(1);if(S.second){cout<<"第一次插入成功"<<endl;}else{cout<<"第一次插入失败"<<endl;}S = s.insert(1);if(S.second){cout<<"第二次插入成功"<<endl;}else{cout<<"第二次插入失败"<<endl;}multiset<int>m;m.insert(2);m.insert(2);for(multiset<int>::iterator it = m.begin();it!=m.end();it++){cout<< *it <<" ";}cout<<endl;
}int main(){test();return 0;
}

七、pair对组创建

两种创建方式:

  • pair<type , type> p ( value1 , value2);
  • pair<type , type> p = make_pair(vlaue1 , value2);

代码示例 

#include<iostream>
using namespace std;void test(){pair<string , int> p ("张三", 18);cout<<"姓名:"<<p.first<<" "<<"年龄:"<<p.second<<endl;pair<string , int> p1  = make_pair("李四", 20);cout<<"姓名:"<<p1.first<<" "<<"年龄:"<<p1.second<<endl;
}int main(){test();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

湖南引力:低代码助力实现智慧养老管理系统

“低代码开发宛如一座神奇的桥梁&#xff0c;它以简洁高效的方式连接起创意与应用&#xff0c;降低了开发门槛&#xff0c;为企业和开发者带来前所未有的便捷与可能&#xff0c;开启了快速实现软件梦想的新征程。” ——王港&#xff0c;湖南引力科技有限公司 湖南引力科技有…

mongodb和Cassandra

mongodb的一致性问题&#xff1a; 15.MongoDB的一致性(读关注与写关注)_mongo w选项-CSDN博客 孤儿节点问题&#xff1a; 技术干货 | MongoDB 偶遇孤儿文档及处理方法-腾讯云开发者社区-腾讯云 分片集群MongoDB迁移前清除孤儿文档 由数据迁移至MongoDB导致的数据不一致问题…

4.3 数据库HAVING语句

having子句要和group by子句联合起来才能使用&#xff0c;不能单独去使用&#xff0c;接下来咱们看一下为什么要引入having子句语法呢&#xff1f;引入having子句也是出于无奈&#xff0c;因为有些条件查询&#xff0c;用group by子句并不能满足要求&#xff0c;比如说查询部门…

支持向量机入门指南:从原理到实践

目录 1 支持向量机的基本概念 1.2 数学表达 2 间隔与支持向量 2.1 几何间隔 2.2 支持向量的概念 2.3 规范化超平面 2.4 支持向量的深入分析 2.4.1 支持向量的特征 2.4.2 支持向量的作用 2.4.3 支持向量的代数表示 2.5 KKT条件 3 最优化问题 3.1 问题的形成 3.2 规…

使用驱动器光盘需格式化:深度解析与数据恢复全攻略

一、驱动器光盘需格式化的现象概述 在日常使用驱动器光盘的过程中&#xff0c;用户可能会遇到系统提示“驱动器中的磁盘未被格式化&#xff0c;是否现在格式化&#xff1f;”的警告。这一提示通常意味着光盘上的文件系统已损坏或无法被系统正常识别&#xff0c;导致无法读取光…

论文研读:AnimateDiff—通过微调SD,用图片生成动画

1.概述 AnimateDiff 设计了3个模块来微调通用的文生图Stable Diffusion预训练模型, 以较低的消耗实现图片到动画生成。 论文名&#xff1a;AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning 三大模块&#xff1a; 视频域适应…

NPM老是无法install,timeout?npm install失败

NPM老是无法install&#xff0c;timeout&#xff1f; 尝试一下如下操作 一、 更换国内源 npm config set registry https://registry.npmmirror.com npm install或指定源install npm install pkg --registry https://registry.npmmirror.com --legacy-peer-deps如下图 二…

【LeetCode 面试经典150题】详细题解之矩阵篇

【LeetCode 面试经典150题】详细题解之矩阵篇 1 矩阵的基础1.1 表示矩阵1.2 创建矩阵相关题目 2 36.有效的数独 &#xff08;需要复习&#xff09;分析代码 3 54.螺旋矩阵&#xff08;需要复习&#xff09;分析代码 4 48.旋转图像思路代码 5 73.矩阵置零 &#xff08;一遍过&am…

Type-C单口便携显示器LDR6021

Type-C单口便携显示器LDR6021是市场上一种新兴的显示设备&#xff0c;以下是对其的详细介绍&#xff1a; 一、主要特点 便携性&#xff1a;LDR6021采用了Type-C接口作为数据传输和供电接口&#xff0c;这种设计使得它能够与各种支持Type-C接口的设备无缝连接&#xff0c;如笔记…

云途领航:现代应用架构助力企业转型新篇

在数字化转型的浪潮中&#xff0c;现代应用架构为企业带来了灵活性、效率和创新能力。各类服务模型相继出现&#xff0c;为企业提供了强有力的支持&#xff0c;助力其顺利转型。随着技术的快速发展&#xff0c;企业面临的挑战和机遇也在不断演变&#xff0c;这促使它们必须重新…

MyBatis如何处理延迟加载?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis如何处理延迟加载&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis如何处理延迟加载&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 支持 延迟加载&#xff08;Lazy Loading&am…

C++--------效率和表示

C 效率和表示 效率 时间效率&#xff1a;在 C 中&#xff0c;不同的数据结构和算法有着各异的时间复杂度。例如&#xff0c;访问数组元素的时间复杂度是 O ( 1 ) O(1) O(1)&#xff0c;而遍历链表查找元素的时间复杂度最坏情况下是 O ( n ) O(n) O(n)。选择合适的算法与数据…

apisix的hmac-auth认证

目录 1、apisix的hmac认证Authorization头信息 2、signature的lua生成源码 3、java生成签证的简单示例 4、postman调用如下 apisix的hmac-auth认证&#xff0c;介绍可以看官方文档 hmac-auth | Apache APISIX -- Cloud-Native API Gateway 照着官方文档&#xff0c;发现生…

Java爬虫实战:深度解析VIP商品详情获取技术

在数字化时代&#xff0c;数据的价值不言而喻。对于电商平台而言&#xff0c;掌握VIP商品的详细信息是提升服务质量、优化用户体验的关键。然而&#xff0c;这些信息往往被复杂的网页结构和反爬虫策略所保护。本文将带你深入了解如何使用Java编写爬虫&#xff0c;以安全、高效地…

Kubernetes 常用的网络插件

上篇内容跟大家简单聊了k8s网络模型原理。分别围绕着容器、Pod、Service、网络策略等展开了详细的讲解。这次想跟大家聊聊k8s的CNI网络插件。 CNI 是 Kubernetes 网络模型的核心组件&#xff0c;它是一个插件接口&#xff0c;允许用户选择和配置网络插件来管理 Pod 的网络。CN…

美国站群服务器如何帮助实现有效的多域名管理?

国站群服务器以其丰富的IP资源、高性能硬件和灵活的配置选项&#xff0c;成为多域名管理的理想选择。特别是在需要针对不同域名实现SEO优化、业务分离或多站点运营的场景中&#xff0c;美国站群服务器提供了高效且实用的解决方案。以下是如何利用美国站群服务器实现有效的多域名…

群晖Cloud Sync一键同步让数据管理变得简单

前言&#xff1a;在这个数字化爆炸的时代&#xff0c;数据管理和备份已经变得不可或缺。无论是个人用户还是企业&#xff0c;都需要一种既高效又可靠的方式来管理和备份分散在各种设备和云存储中的文件。而群晖的 **Cloud Sync** 套件正是为了解决这个问题而生。 Cloud Sync 是…

IntelliJ IDEA Docker集成

一、概述 Docker是一种用于在隔离和可复制环境中部署和运行可执行文件的工具。这可能很有用&#xff0c;例如&#xff0c;在与生产相同的环境中测试代码。 IntelliJ IDEA集成了Docker功能&#xff0c;并为创建Docker映像、运行Docker容器、管理Docker Compose应用程序、使用公…

AES 与 SM4 加密算法:深度解析与对比

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…