STL学习-无序容器-unordered set和unorderde multiset

1.定义及初始化

#include <unordered set>
#include <iostream>
using namespace std;
//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";cout << endl;
}
int main()
{
unordered_set<int>s1;//定义一个空的无序set
unordered_set<int>s2{5,5,3,9,35,8,21,4};//通过列表创建无序set
unordered multiset<int>s3{5,5,3,9,35,8,21,4};//通过列表创建无序multiset
unordered_multiset<int>s4{s2.begin(),s2.end()};//通过迭代器区间创建无序multiset
unordered multiset<int>s5=s3;//通过s3构造s5
cout<<"s1:"; Show(s1);
cout <<"s2:";Show(s2);
cout<<"s3:";Show(s3);
cout <<"s4:";Show(s4);
cout<<"s5:";Show(s5);
return 0;
}

说明:
s2不能存放相同的元素,s3可以存放相同的元素,
不能对数据的存放顺序做任何假设。初始化的顺序和输出的顺序没有任何关联。特别是s5和s3
的顺序也不相同。

2.添加或删除元素

通过insert函数插入数据。
通过erase删除元素。

下面示例演示基本用法,insert和erase更详细的用法请参考后面函数详细介绍。

//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";cout << endl;
}
int main()
{
vector<int>v{9,12,34,56};//创建一个向量v
unordered_set<int>s1;//定义一个空的无序set
s1.insert(3);//插入当个元素
s1.insert({5,2,1,9});//插入一个列表(多个元素)
s1.insert(v.begin(),v.end());//插入一个迭代器区间(多个元素)
cout<<"s1:";Show(s1);
s1.erase(1);//删除元素1
cout<<"删除1后"<<endl;
cout<<"s1:";Show(s1);
return 0;
}

3.常用迭代器

只支持forward迭代器(向前迭代器)

int main()
{
unordered_multiset<int>s{1,1,2,3,40,5,6,7,8};//创建一个无序的multiset
for(auto it=s.cbegin();it != s.cend();++it)//通过迭代器输出所有元素
cout << *it << "";return 0;
}

4.常用运算符

无序容器,存放数据的位置不能确定,即使相同的数据,存放的位置都可能不同,所以不提供>,<等判断

​
//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";
cout << endl;
}
int main()
{
unordered_multiset<int>s1{5,5,3,9,35,8,21,4};//通过列表创建无序multiset
unordered multiset<int>s2=s1;//通过s1构造s2
cout<<"s1:";Show(s1);
cout<<"s2:";Show(s2);
if(s1 == s2)
cout<<"s1 == s2"<< endl;s1.insert(1);
cout<<"向s1插入1后"<< endl;
if(s1 != s2)
cout <<"s1 != s2"<< endl:
return 0;
}​

5.常用成员函数

insert成员函数

//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
Cout << x<<" ";
cout<< endl;
}
int main()
{
unordered_set<int>s1{10,20,30,40};//创建一个无序集合对象
vector<int>v{21,22,23};
//创建一个向量对象
//插入一个元素
s1.insert(5);
//提示在begin(迭代器)后面插入,以实际为准
s1.insert(s1.begin(),7);
s1.insert({ 11,12,13,14,15 });//插入多个元素(一个列表)
s1.insert(v.begin(),v.end());//插入一个迭代器区间
cout<<"s1:";Show(s1);
return 0;
}

erase成员函数

其函数原型如下

iterator erase(const_iterator Where);
iterator erase( const_iterator First,const_iterator Last);
size_type erase( const key_type& Key);
//输出s中的所有元素
template<typename:T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";
cout<< endl;
}
int main()
{
unordered set<int>s1{1,2,3,4,5};
cout<<"s1:";Show(s1);
s1.erase(1);//删除一个值
cout<<“删除1后,s1:"; Show(s1);
s1.erase(++s1.begin(),s1.end());//删除一个迭代器区间
cout<<"只保留第一个元素,s1:";Show(s1);
return 0;
}

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

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

相关文章

鸿蒙(Harmony)实现滑块验证码

在Android和ios两端已经使用的滑块验证码框架还未适配鸿蒙版&#xff0c;于是需要自己去实现类似如下的滑块验证码&#xff1a; 那么实现这样的验证码主要涉及到几个内容&#xff1a; 1、自定义弹窗 2、base64图片转换 3、滑动组件与滑块的联动&#xff0c;以及横移距离转换…

《华为工作法》读书摘记

无论做什么事情&#xff0c;首先要明确的就是做事的目标。目标是引导行动的关键&#xff0c;也是证明行动所具备的价值的前提&#xff0c;所以目标管理成了企业与个人管理的重要组成部分。 很多时候&#xff0c;勤奋、努力并不意味着就一定能把工作做好&#xff0c;也并不意味…

三维测量与建模笔记 - 3.3 张正友标定法

上图中&#xff0c;提到了世界坐标系在张正友标定法中的设计&#xff0c;可以理解为将世界坐标系的原点放到了棋盘格左上角点的位置&#xff0c;并且棋盘格平面上所有点的Z为0&#xff0c;将Z规定为0的话&#xff0c;可以简化掉一个维度&#xff08;列向量r3&#xff09;。去掉…

【课程总结】day34:多模态大模型之ViT模型、CLIP模型论文阅读理解

前言 在【课程总结】day31&#xff1a;多模态大模型初步了解一文中&#xff0c;我们对多模态大模型的基本原理有了初步了解&#xff0c;本章内容将通过论文阅读理解&#xff0c;更进一步理解多模态大模型中所涉及的 Vit 架构、Transformer在视觉应用的理念以及 Clip图像与文本…

国药准字生发产品有哪些?这几款不错

头秃不知道怎么选的朋友们看这&#xff0c;基本上市面上火的育发精华我都用了个遍了&#xff0c;陆陆续续也花了有大几w了&#xff0c;都是真金白银总结出来的&#xff0c;所以必须要给掉发人分享一些真正好用的育发产品&#xff0c;大家可以根据自己实际情况来选择。 1. 露卡菲…

golang分布式缓存项目 Day 1

注&#xff1a;该项目原作者&#xff1a;https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 LRU缓存淘汰策略 三种缓存淘汰策略 FIFO&#xff08;First In, First Out&#xff09;先进先出 原理&…

Android View事件分发

目录 1.什么是View事件分发&#xff1f; 2.事件的类型 3.事件的发生 4.事件分发的方法 4.1 dispatchTouchEvent() 4.2 onTouchEvent() 4.3 onInterceptTouchEvent() 5.滑动冲突 5.1 外部拦截法 5.2内部拦截法 6.onTouch的执行高于onClick 7. onTouch()和onTouchEve…

Elasticsearch常用接口_添加数据

插入es数据&#xff1a;_index/_type/ POST { "tabTitle": "森图表_test", "chtTabTitle": "森图表_test", "status": 0 } 注意&#xff1a;Elasticsearch 6.0.0及更高版本中&#xff0c;索引只能包含一个映射类型

springboot养老院信息管理系统-计算机设计毕业源码30958

目 录 摘要 1绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

OkHttp网络请求框架

添加依赖 在 build.gradle 文件中添加 OkHttp 依赖&#xff1a; dependencies {implementation("com.squareup.okhttp3:okhttp:4.10.0") }使用OkHttp发起GET请求 同步请求 public class MainActivity extends AppCompatActivity {// Used to load the okhttptes…

基于sealos部署的集群部署dashboard

1、下载yaml文件进行部署 rootmaster-1:~# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml2、修改service的访问模式 rootmaster-1:~# vim recommended.yaml kind: Service apiVersion: v1 metadata:labels:k8s-app: kube…

手机贴膜气泡识别组件定位图像分割系统:快速图像识别

手机贴膜气泡识别组件定位图像分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-Parc&#xff06;yolov8-seg-KernelWarehouse等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge …

C语言 | Leetcode C语言题解之第538题把二叉搜索树转换为累加树

题目&#xff1a; 题解&#xff1a; struct TreeNode* getSuccessor(struct TreeNode* node) {struct TreeNode* succ node->right;while (succ->left ! NULL && succ->left ! node) {succ succ->left;}return succ; }struct TreeNode* convertBST(stru…

SQL--查询连续三天登录数据详解

问题&#xff1a; 现有用户登录记录表&#xff0c;请查询出用户连续三天登录的所有数据记录 id dt1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 20…

数据结构和算法-01背包问题01-认识01背包

0-1背包 什么是0-1背包问题&#xff1f; [0-1背包问题Knapsack Problem] 假设有一个背包&#xff0c;可承载的最大重量是W(kg)&#xff0c; 现在有n个物品&#xff0c;每个物品的重量不等&#xff0c; 并且不可分割。我们期待选择几件物品放入背包中&#xff0c;在不超过背包最…

go-carbon 和 gorm 优雅处理数据库日期时间

一、简介 (一) carbon carbon 是一个简单、语义化、开发人员友好的 golang 时间包。carbon 提供了丰富的日期和时间处理功能&#xff0c;使得日期和时间操作更加简单和直观。 (二) gorm gorm 是一个用于 Go 语言的 ORM&#xff08;对象关系映射&#xff09;框架。它提供了简…

Java 抽象类 详解

文章目录 一、概述1.1、什么是抽象类1.2、定义抽象类1.3、什么是抽象方法1.4、定义抽象方法 二、特点2.1、抽象类的特点2.1.1、抽象类不可以实例化对象2.1.2、抽象类必须要被继承2.1.3、抽象类的子类2.1.4、抽象类的成员 2.2、抽象方法的特点2.2.1、只能有方法声明&#xff0c;…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

SpringBoot Java教学工具:创新教育体验

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理教学辅助平台的相关信息成为必然。开发合适…

VisionPro —— CogIPOneImgeTool工具详解

CogIPOneImageTool工具主要用来对单张图像进行算法处理操作 CogIPOneImgeTool简介 CogIPOneImageTool 工具可完成高斯平滑、高通滤波和图像量化等基本图像处理操作。Image Processing One Image 工具编辑控件为此工具提供图形用户界面。 Image Processing Operations (图像处…