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<<" ";
	 }
	 
	 //查找元素8
	  cout<<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;
}

在这里插入图片描述

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值