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;
}
输出