set容器的特性:
1.所有元素都会根据元素的键值自动排序,set元素的键值又是实值,set不允许两个元素有相同的键值(实值);
2.不可以通过迭代器改变set元素的值。因为set元素值就是其键值,关系到set元素的排序规则。如果通过迭代器改变set元素值,会破坏set组织。set的iterator是const的;
3.multiset的用法和set一样,唯一不同在于,multiset允许键值重复。
set的常用API:
1.set构造函数
set<T> s默认构造
multiset<T> ms默认构造
set(const set& s)拷贝构造
2.set赋值操作
set& operator=(const set& s)重载赋值运算符
swap(s)交换两个集合容器
3.set大小操作
size()返回容器中元素的数目
empty()判断容器是否为空
4.插入和删除操作
insert(ele)插入元素
clear()清除所有元素
erase(pos)删除pos迭代器指向的元素,返回下一个元素的迭代器
erase(beg,end)删除[beg,end)的所有元素,返回下一个元素的迭代器
erase(ele)删除值为ele的元素
5.set查找操作
find(key)查找key是否存在,若存在,返回该元素的迭代器,若不存在,返回set.end()
count(key)查找key元素的个数
lower_bound(keyele)返回第一个key<》keyele的元素的迭代器
upper_bound(keyele)返回第一个key>keyele元素的迭代器
equal_range(keyele)返回容器中key与keyele相等的上下限的两个迭代器
----------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<set>
using namespace std;
//set容器插入操作的返回值时对组
void test0()
{
set<int> s;
pair<set<int>::iterator, bool> pir;
pir = s.insert(10);
if (pir.second)
{
cout << "insert success" << endl;
}
}
//set容器可指定排序方式
struct myCompare {
bool operator()(int v1, int v2)//重载()运算符
{
return v1 > v2;
}
};
void test1()
{
set<int,myCompare> s;//set容器默认less<_kty>排序
srand((unsigned int)time(NULL));
int i;
for (i = 0;i < 10;i++)
{
int tmp = rand() % 100;
s.insert(tmp);
}
set<int, myCompare>::iterator beg = s.begin();
set<int, myCompare>::iterator end = s.end();
for (;beg != end;beg++)
{
cout << *beg << endl;
}
}