使用set或multiset之前,必须加入头文件<set>
Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。
sets和multiset内部以红黑树实现
set c1(c2):复制c2中的元素到c1中
set c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
set c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。
c.~set()销毁所有元素,释放内存
multiset mc:创建空集合,不包含任何元素
multiset mc(op):以op为排序准则,产生一个空的set
multiset c1(c2):复制c2中的元素到c1中
multiset c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
multiset c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。
bool empty() const:判断容器是否为空,若返回true,表明容器已空
iterator insert(iterator it,x):在迭代器it处插入元素x
void insert(const value_type *first,const value_type *last):插入[first, last)之间元素
iterator erase(iterator it):删除迭代器指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
iterator begin():返回首元素的迭代器指针
const_iterator upper_bound(const Key& key):返回容器中大于key的迭代器指针
const_iterator find(const Key& key) const:查找功能,返回元素值等于key的迭代器指针
void swap(set& s):交换集合元素
Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。
sets和multiset内部以红黑树实现
1)构造函数和析构函数
set c:创建空集合,不包含任何元素
set c(op):以op为排序准则,产生一个空的setset c1(c2):复制c2中的元素到c1中
set c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
set c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。
c.~set()销毁所有元素,释放内存
multiset mc:创建空集合,不包含任何元素
multiset mc(op):以op为排序准则,产生一个空的set
multiset c1(c2):复制c2中的元素到c1中
multiset c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
multiset c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。
c.~set()销毁所有元素,释放内存
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> s1;
set<int,greater<int> > s2;
for(int i = 1; i <= 6; i++){
s1.insert(i);
s2.insert(i);
}
set<int> s3(s1);
//cout<<s1[0]<<endl;
//cout<<s1.begin()<<endl;这两种输出,编译均会报错
cout<<"s1:"<<endl;
for(set<int>::iterator it = s1.begin(); it != s1.end(); it++)
cout<<*it<<' ';
cout<<endl;
cout<<"s2"<<endl;
for(set<int>::iterator it = s2.begin(); it != s2.end(); it++)
cout<<*it<<' ';
cout<<endl;
cout<<"s3:"<<endl;
for(set<int>::iterator it = s3.begin(); it != s3.end(); it++)
cout<<*it<<' ';
cout<<endl;
return 0;
}
程序的运行结果如下:
2) 大小、判断空函数
int size() const:返回容器元素个数bool empty() const:判断容器是否为空,若返回true,表明容器已空
3)增加、删除函数
pair<iterator,bool> insert( x):插入元素xiterator insert(iterator it,x):在迭代器it处插入元素x
void insert(const value_type *first,const value_type *last):插入[first, last)之间元素
iterator erase(iterator it):删除迭代器指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
size_type erase(const Key& key):删除元素值等于key的元素
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> s;
multiset<int> ms;
for(int i = 6; i > 0; i--){
s.insert(i);
ms.insert(i);
}
cout<<"s:"<<endl;
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout<<*it<<' ';
cout<<endl;
s.erase(3);
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout<<*it<<' ';
cout<<endl;
s.insert(3);
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout<<*it<<' ';
cout<<endl;
cout<<"ms:"<<endl;
ms.insert(3);
for(multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)
cout<<*it<<' ';
cout<<endl;
ms.erase(3);
for(multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)
cout<<*it<<' ';
cout<<endl;
ms.insert(3);
ms.insert(3);
ms.erase(ms.find(3));
for(multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)
cout<<*it<<' ';
cout<<endl;
return 0;
}
程序的运行结果如下:
4)遍历函数
iterator begin():返回首元素的迭代器指针iterator end():返回尾元素的迭代器指针
reverse_iterator rbegin():返回尾元素的逆向迭代器指针
reverse_iterator rend():返回首元素前一个位置的迭代器指针5)操作函数
const_iterator lower_bound(const Key& key):返回容器中大于等于key的迭代器指针const_iterator upper_bound(const Key& key):返回容器中大于key的迭代器指针
int count(const Key& key) const:返回容器中元素等于key的元素的个数
pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中元素值等于key的迭代指针[first, last)const_iterator find(const Key& key) const:查找功能,返回元素值等于key的迭代器指针
void swap(set& s):交换集合元素
void swap(multiset& s):交换多集合元素
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> s;
for(int i = 6; i > 0; i--)
s.insert(i);
cout<<"s:"<<endl;
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout<<*it<<' ';
cout<<endl;
s.erase(s.find(3));
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
cout<<*it<<' ';
cout<<endl;
cout<<*lower_bound(s.begin(),s.end(),3)<<endl;
if(lower_bound(s.begin(),s.end(),3) != s.end())
cout<<"Find"<<endl;
else
cout<<"Not find"<<endl;
if(lower_bound(s.begin(),s.end(),6) != s.end())
cout<<"Find"<<endl;
else
cout<<"Not find"<<endl;
if(lower_bound(s.begin(),s.end(),12) != s.end())
cout<<"Find"<<endl;
else
cout<<"Not find"<<endl;
return 0;
}
程序的运行结果如下:
有待更新。。。