C++_STL—Set及Multiset篇

C++_STL—Set/Multiset篇

set和multiset 会根据特定的排序准则,自动将元素排序。两者不同之处,在于multiset允许元素重复,而set不允许重复,如图1所示。
在这里插入图片描述

1. 构造函数和析构函数

set<int> c:创建空集合,不包含任何元素
set<int> c(op):以op为排序准则,产生一个空的set
se<int>t c1(c2):复制c2中的元素到c1中
c.~set<int>()销毁所有元素,释放内存

multiset<int> mc:创建空集合,不包含任何元素
multiset<int> mc(op):以op为排序准则,产生一个空的set
multiset<int> c1(c2):复制c2中的元素到c1中
c.~multiset<int>()销毁所有元素,释放内存

2. 大小、判断空函数

int size() const:返回容器元素个数
bool empty() const:判断容器是否为空,若返回true,表明容器已空

3. 增加、删除函数

pair<iterator,bool> insert( x):插入元素x
iterator insert(iterator it,x):在迭代器it处插入元素x


iterator erase(iterator it):删除迭代器指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
size_type erase(const Key& key):删除元素值等于key的元素

4. 遍历函数

iterator begin():返回首元素的迭代器指针
iterator end():返回尾元素的迭代器指针
reverse_iterator rbegin():返回尾元素的逆向迭代器指针
reverse_iterator rend():返回首元素前一个位置的迭代器指针

  for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)  
    std::cout << ' ' << *it;  

5. 操作函数

const_iterator lower_bound(const Key& key):返回容器中大于等于key的迭代器指针
const_iterator upper_bound(const Key& key):返回容器中大于key的迭代器指针
int count(const Key& key) const:返回容器中元素等于key的元素的个数

const_iterator find(const Key& key) 查找功能,返回元素值等于key的迭代器指针
void swap(set& s):交换集合元素
void swap(multiset& s):交换多集合元素  


eg:
std::set<int> myset;  
std::set<int>::iterator itlow,itup;  
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90   
itlow=myset.lower_bound (30);                //       ^  
itup=myset.upper_bound (60);                 //   


set<int> myset;  
for (int i=1; i<=5; i++) myset.insert(i*10);   // myset: 10 20 30 40 50  
pair<set<int>::const_iterator,set<int>::const_iterator> ret;  
ret = myset.equal_range(30);  


set<int> first (myints,myints+3);     // 10,12,75  
set<int> second (myints+3,myints+6);  // 20,25,32  
first.swap(second);  

set操作-自动删除重复元素/multiset保留重复元素

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

int main(int argc, char *argv[]) {
	
	set<int> test;
	//插入数值 
	test.insert(20);
	test.insert(10);
	test.insert(50);
	//插入重复的值会被自动删除只保留一个 
	test.insert(50);
	test.insert(300);
	test.insert(4);
	
	//遍历输出 
	cout<<"output:"<<endl;
	for(set<int>::iterator i=test.begin();i!=test.end();i++)
		//自动排序 
		cout<<*i<<endl;
				
	set<int>::iterator setFind;
	setFind = test.find(50);//find操作
	//如果能找到 
	if(setFind!=test.end())
		cout<<"Already find";
		
	test.erase(10); //删除10; 

	return 0;
}

输出
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老陈聊架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值