multiset用法详解
multiset和set都是属于c++中的集合容器
multiset与set的区别:multiset支持重复,而set会去重
set相关知识可参考:set集合详解
头文件
#include< set >
声明和初始化
声明一个multiset,按升序排列,默认升序排列multiset<int>set1;等价于:或 multiset<int,less<int>>set1;声明一个multiset,按降序排列
multiset<int, greater<int>>set1;
常用函数
函数 | 用法 | 作用 |
---|---|---|
insert() | set1.insert(n) | 向集合插入元素n,n可以为重复值 |
erase() | set1.erase(10) | 在set1中删除元素等于10的所有副本 |
empty() | set1.empty() | 返回值bool类型,若set1为空,则返回true |
swap() | set1.swap(set2) | 将set1和set2交换 |
size() | set1.size() | 返回值为int类型,set1当前存放的元素的个数 |
find() | set1.find(n) | 返回iterator,指向第一个找到数值n的位置,若找不到则返回的iterator等于set1.end() |
resize() | set1.resize(10) | 重置set1的大小为10 |
lower_bound() | set1.lower_bound(n) | 返回set1中第一个找到数值n的位置的iterator,如果找不到则返回end() |
upper_bount() | set1.upper_bound(n) | 返回set1中最后一个找到数值n的位置的后一个位置的iterator,如果找不到则返回end() |
count() | set1.count(n) | 确定set1中数值n出现的次数 |
迭代器
set的迭代器通常实现为set元素的指针。
//开始指针(正向)
set1.begin()//结束指针(正向),指向set1最后一个元素的后一位
set1.end()//开始指针(逆向)
set1.rbegin()//结束指针(逆向),指向set1最后一个元素的后一位
set1.rend()//常量开始指针(正向),不能通过该指针来修改所指内容
set1.cbegin()//常量结束指针(正向),不能通过该指针来修改所指内容,指向set1最后一个元素的后一位
set1.cend()
输出
//迭代器,顺序访问for (multiset<int>::iterator p = nums.begin(); p != nums.end(); p++)cout << *p << " ";//迭代器,逆序访问for (set<int>::reverse_iterator p = nums.rbegin(); p != nums.rend(); p++)cout << *p << " ";
代码演示:
#include<iostream>
#include<set>
using namespace std;
int main(){//声明默认集合,默认升序multiset< int > set1;for(int i=10;i>=0;i--){set1.insert(i);}set1.insert(1);//测试是否去重 set1.insert(2);//顺序输出cout<<"顺序遍历集合set1:"; for(multiset<int>::iterator it = set1.begin();it!=set1.end();it++){cout<<*it<<" ";}//逆序输出 cout<<endl<<"逆序遍历集合set1:";for(multiset<int>::reverse_iterator it = set1.rbegin();it!= set1.rend();it++){cout<<*it<<" ";}//测试元素获取集合大小 cout<<endl<<"set1集合大小为:"<<set1.size(); //测试集合是否非空 multiset< int,less<int> > set2;cout<<endl<<"set1是否为空"<<set1.empty();cout<<endl<<"set2是否为空"<<set2.empty()<<endl;//删除元素set1.erase(1); cout<<"删除元素1后,set1集合元素::"; for(multiset<int>::iterator it = set1.begin();it!=set1.end();it++){cout<<*it<<" ";}//查找元素8cout<<endl<<"找到set1集合元素8并输出:";multiset<int>::iterator it=set1.find(8);cout<<*it;//交换集合元素set2.insert(0);set2.insert(0);set1.swap(set2);cout<<endl<<"交换后set1元素为:" ;for(multiset<int>::iterator it = set1.begin();it!=set1.end();it++){cout<<*it<<" ";}cout<<endl<<"交换后set2元素为:" ;for(multiset<int>::iterator it = set2.begin();it!=set2.end();it++){cout<<*it<<" ";}//清空集合set1.clear();cout<<endl<<"集合set1是否非空:"<<set1.empty()<<endl; //声明集合按降序排列multiset< int ,greater<int> > set3;set3.insert(11);set3.insert(13);set3.insert(14);cout<<"输出降序集合set3:";for(multiset<int> :: iterator it=set3.begin();it!=set3.end();it++){cout<<*it<<" ";} return 0;
}
multiset用法详解相关推荐
- STL:set/multiset用法详解
集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...
- C++ STL容器 —— map/multimap 用法详解
C++ STL容器 -- map/multimap 用法详解 写在前面:近期正在学习C++的STL容器,因此在这里做一下日志记录,主要介绍一些容器基本成员函数的用法, 配上实际用例,并不涉及原理.但别 ...
- STL迭代器(iterator)用法详解
C++ STL迭代器(iterator)用法详解 无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用"迭代器(iterator)"来实 ...
- c 语言中set的用法,C++中set用法详解
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- python argv 详解_Python3 sys.argv[ ]用法详解
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...
- oracle中的exists 和 not exists 用法详解
from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...
- ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...
- python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解
本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...
- C++中substr()函数用法详解
C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...
- php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy
Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...
最新文章
- 一个QT比较好的博客资源
- Android App开发——使用CameraX打开前后摄像头拍照并保存(Java实现)
- 使用枚举定义常量更好点儿
- 客服顾问的工具箱--走出软件作坊:三五个人十来条枪 如何成为开发正规军(六)[转]...
- AUTOSAR从入门到精通100讲(二十)-特斯拉、高通、华为AI处理器深度分析
- 在Codeigniter框架中使用NuSOAP
- MySQL工具名字_MySQL客户端工具及SQL讲解
- 日志分析工具 Log Parser
- 80行代码使用Python+tkinter实现一个计算器
- Merge k Sorted Lists
- UNIX环境高级编程习题——第一章
- 2013八大免费杀毒软件排行榜
- 使用phpquery采集小说
- 阿里云服务器被恶意程序攻击
- 杀毒软件和防火墙的区别
- F1值(F-Measure)、准确率(Precision)、召回率(Recall) 菜鸡版理解
- gulp4.0的坑:提示: Error: watching index.html: watch task has to be a function (optionally generated by u
- java基于ssm框架开发的高校实验室预约管理系统实战项目
- ESP8266固件烧录教程
- 怎么禁用笔记本的触摸板
热门文章
- mapgis明码文件转为点线面文件_Geomap格式转化.doc
- pc station v15 博图_博图的pcstation是做什么的?和wincc有什么区别?怎么使用?-工业支持中心-西门子中国...
- 鸿蒙系统pc版 硬件要求,原神全平台配置要求 原神配置需求一览
- iptables之forward转发
- iPad远程控制windows主机及内网穿透原理
- 【计算机网络】1.计算机网络与因特网概述
- 网吧用服务器做虚拟化,网吧内共享服务器搭建
- 数学之美番外篇:进化论中的概率论
- 如何在 oracle 集群环境下修改私网信息 (文档 ID 2103317.1)
- ARM Coresight