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用法详解相关推荐

  1. STL:set/multiset用法详解

    集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...

  2. C++ STL容器 —— map/multimap 用法详解

    C++ STL容器 -- map/multimap 用法详解 写在前面:近期正在学习C++的STL容器,因此在这里做一下日志记录,主要介绍一些容器基本成员函数的用法, 配上实际用例,并不涉及原理.但别 ...

  3. STL迭代器(iterator)用法详解

    C++ STL迭代器(iterator)用法详解 无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用"迭代器(iterator)"来实 ...

  4. c 语言中set的用法,C++中set用法详解

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  5. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  6. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  7. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  8. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  9. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  10. php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy

    Yii2主题(Theme)用法详解 本文实例讲述了Yii2主题(Theme)用法.分享给大家供大家参考,具体如下: 首先看看主要的配置方式: 'components' => [ 'view' = ...

最新文章

  1. 一个QT比较好的博客资源
  2. Android App开发——使用CameraX打开前后摄像头拍照并保存(Java实现)
  3. 使用枚举定义常量更好点儿
  4. 客服顾问的工具箱--走出软件作坊:三五个人十来条枪 如何成为开发正规军(六)[转]...
  5. AUTOSAR从入门到精通100讲(二十)-特斯拉、高通、华为AI处理器深度分析
  6. 在Codeigniter框架中使用NuSOAP
  7. MySQL工具名字_MySQL客户端工具及SQL讲解
  8. 日志分析工具 Log Parser
  9. 80行代码使用Python+tkinter实现一个计算器
  10. Merge k Sorted Lists
  11. UNIX环境高级编程习题——第一章
  12. 2013八大免费杀毒软件排行榜
  13. 使用phpquery采集小说
  14. 阿里云服务器被恶意程序攻击
  15. 杀毒软件和防火墙的区别
  16. F1值(F-Measure)、准确率(Precision)、召回率(Recall) 菜鸡版理解
  17. gulp4.0的坑:提示: Error: watching index.html: watch task has to be a function (optionally generated by u
  18. java基于ssm框架开发的高校实验室预约管理系统实战项目
  19. ESP8266固件烧录教程
  20. 怎么禁用笔记本的触摸板

热门文章

  1. mapgis明码文件转为点线面文件_Geomap格式转化.doc
  2. pc station v15 博图_博图的pcstation是做什么的?和wincc有什么区别?怎么使用?-工业支持中心-西门子中国...
  3. 鸿蒙系统pc版 硬件要求,原神全平台配置要求 原神配置需求一览
  4. iptables之forward转发
  5. iPad远程控制windows主机及内网穿透原理
  6. 【计算机网络】1.计算机网络与因特网概述
  7. 网吧用服务器做虚拟化,网吧内共享服务器搭建
  8. 数学之美番外篇:进化论中的概率论
  9. 如何在 oracle 集群环境下修改私网信息 (文档 ID 2103317.1)
  10. ARM Coresight