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.mzph.cn/bicheng/58832.shtml

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

相关文章

玩转Docker | Docker基础入门与常用命令指南

玩转Docker | Docker基础入门与常用命令指南 引言基本概念help帮助信息常用命令管理镜像运行容器构建镜像其他Docker命令整理结语引言 Docker 是一种开源的应用容器引擎,它允许开发者将应用程序及其依赖打包进一个可移植的容器中,然后发布到任何流行的 Linux 机器上。这大大简…

基于SSM医药进出口交易系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品信息管理&#xff0c;仓储部门管理&#xff0c;供应部门管理&#xff0c;业务部门管理&#xff0c;客户管理&#xff0c;财务部管理 业务部门账号功能包括&#xff1a;系统首页&#xff0c;个人中…

2024年大湾区杯粤港澳金融数学建模赛题浅析——助攻快速选题

一图流 赛题难度 A:B2:1 选题人数 A:B2:3 A题&#xff1a;证券市场投资风险控制模型设计 问题简述 随着金融市场的发展&#xff0c;系统性风险的管理变得越来越重要。本题要求通过量化方法测度和监测系统性风险&#xff0c;设计风险计量指标&#xff0c;并基于这些指标构建预…

胡壮麟《语言学教程》第五版PDF英文版+中文版翻译

胡壮麟《语言学教程》中文版&#xff1a;https://pan.quark.cn/s/9491130ec572 《语言学教程》&#xff08;英文版&#xff09;是一部经典的语言学教材&#xff0c;自 1988 年面世以来&#xff0c;被众多高校广泛采用&#xff0c;长销不衰。该教材自出版以来不断修订&#xff…

基于Pycharm和Django模型技术的数据迁移

1.配置数据库 在trip_server/settings.py中修改配置&#xff1a; 其格式可访问官网&#xff1a;Settings | Django documentation | Django 1.1 配置数据库 文件地址&#xff1a;trip_server/settings.py 配置前需要创建&#xff08;NaviCat&#xff09;个人数据库 "…

java访问华为网管软件iMaster NCE的北向接口

最近做的一个项目&#xff0c;需要读取华为一个叫iMaster NCE的网管软件的北向接口。这个iMaster NCE&#xff08;以下简称NCE&#xff09;用于管理项目的整个网络&#xff0c;尤其是光网络。业主要求我们访问该软件提供的对外接口&#xff0c;读取一些网络信息&#xff0c;比如…

InstructIR: High-Quality Image Restoration Following Human Instructions 论文阅读笔记

这是Radu大佬所在的Wrzburg大学的computer vision lab实验室发表在ECCV2024上的一篇论文&#xff0c;代码开源。文章提出了一种文本引导的All-in-One的restoration模型&#xff0c;如下图所示&#xff1a; 这个工作其实跟"InstructPix2Pix: Learning to Follow Image Edit…

【实用教程】.NET C# PDF 生成技术:哪种方法适合您的项目?

概述&#xff1a;本文介绍了 TX Text Control 真正的 WYSIWYG&#xff08;所见即所得&#xff09;模板系统所带来的独特优势&#xff0c;与传统的 PDF 生成系统&#xff08;如 HTML 到 PDF 转换器或需要自定义编程的 PDF 库&#xff09;相比&#xff0c;模板是可视化设计的&…

notepad++ compare插件的离线下载和安装

一、离线安装 去改地址找到最新的插件&#xff1a;https://github.com/notepad-plus-plus/nppPluginList/blob/master/doc/plugin_list_x64.md下载之后复制到插件文件夹&#xff0c;插件文件夹的打开方式如下 注意目录&#xff1a; 二、问题汇总 &#xff08;1&#xff09…

echarts地图,柱状图,折线图实战

1.地图 <template><div style"height: 100%;" class"cantainerBox"><div class"top"><div class"leftTop"><span class"firstSpan">推广进度</span><div>省份选择&#xff1a;&l…

HTB:Cicada[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行开放端口扫描 使用nmap对靶机开放端口进行脚本、服务信息扫描 首先尝试空密码连接靶机SMB服务 由于不知道账户名&#xff0c;这里我们使用crackmapexec对smb服务进行用户爆破 通过该账户连接至靶机SMB服务器提取敏感信…

张嘉译王海燕婚姻告急?17年长跑终落幕,真相究竟如何?

娱乐圈又一对金童玉女分道扬镳&#xff1f;在这个瞬息万变的娱乐圈里&#xff0c;爱情似乎总是来得快去得也快。近日&#xff0c;一则关于实力派演员张嘉译与妻子王海燕结束17年婚姻长跑的消息&#xff0c;如同一颗重标题&#xff1a;&#x1f494;张嘉译王海燕婚姻告急&#x…

我的电视 左侧列表内置版 | 非常高清,频道丰富的电视直播应用

我的电视是一款专注于电视直播的应用程序&#xff0c;提供丰富且全面的电视频道&#xff0c;包括央视及各大卫视。无论您是想看新闻、体育、电影还是综艺节目&#xff0c;都可以在这里找到。应用支持高清画质播放&#xff0c;确保流畅无卡顿的观看体验。简洁的界面设计和智能推…

Conmi的正确答案——在Kibana中进入Elasticsearch的索引管理页面

Elasticsearch版本&#xff1a;7.17.25 Kibana版本&#xff1a;7.17.25 注&#xff1a;索引即类似mysql的表。 0、进入首页 1、未创建任何“索引模式”时&#xff1a; 1.1、点击左边的三横菜单&#xff1b; 1.2、点击“Discover”&#xff0c;进入“发现”页面&#xff1b; 2…

在线体验Sketch中文版,免费下载即刻上手!

Sketch是一款轻量而高效的矢量设计工具&#xff0c;助力全球设计师创造了诸多惊艳作品。安装Sketch的优势主要体现在其矢量编辑、控件和样式功能上。而下载安装“Sketch中文版”即时设计同样出色&#xff0c;它作为一站式设计平台&#xff0c;功能更全面。即时设计拥有纯中文的…

aws(学习笔记第九课) 使用AWS的网络存储EBS

aws(学习笔记第九课) 使用AWS的网络存储EBS 学习内容&#xff1a; 使用AWS的网络存储EBS 1.使用AWS的网络存储EBS EBS是什么 EBS是aws Elastic Block Store的缩写&#xff0c;就是AWS的弹性数据块存储。EBS有如下特点。 它不属于EC2的一部分&#xff0c;独立存在。可以独立存…

DAY67WEB 攻防-Java 安全JNDIRMILDAP五大不安全组件RCE 执行不出网

知识点&#xff1a; 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类&#xff1a; Groovy Runti…

11-Python基础编程之错误和异常

Python基础编程之错误和异常 概念错误异常 常见的系统异常异常的解决预防捕捉处理异常with语句 手动抛出异常自定义异常 概念 错误 可以通过代码进行修复&#xff1b; 异常 需要提前考虑&#xff0c;设定限制条件&#xff1b;不能通过代码进行修复&#xff1b; 常见的系…

鸿蒙开发融云demo发送图片消息

鸿蒙开发融云demo发送图片消息 融云鸿蒙版是不带UI的&#xff0c;得自己一步步搭建。 这次讲如何发送图片消息&#xff0c;选择图片&#xff0c;显示图片消息。 还是有点难度的&#xff0c;好好看&#xff0c;好好学。 一、思路&#xff1a; 选择图片用&#xff1a;photoVie…

Linux工具(yum/apt,vim)

yum(或apt) Linux中常见的软件的安装方式 : 1. yum/apt 2. rpm 安装包安装 3. 源码安装 yum/apt相当于手机中的各种应用管家 vim指令 vim是一个多模式的编辑器,只用于写代码 刚进入vim默认是命令模式 想要在vim中写代码,必须要进入插入模式 想要退出vim首先必须进入底行…