1、set的基本概念
set与map相同的是:底层均采用红黑树,因此所有元素都会根据元素的键值自动排序,与map不同的是:map中存放真正的键值对<key,value>,而set中的value就是key,key就是value,虽然set提供给用户的接口只存放value,而实际底层真正存放的是<value, value>的键值对,即set中key就是value,value就是key。
2、set的基本操作
使用set时必须包含头文件以及std标准命名空间。
(1)insert():插入数据。
(2)erase():删除数据。
(3)find():查找数据。
(4)clear():数据的清空。
(5)empty():数据的判空。
(6)size():获取有效元素的大小。
(7)count():获取键值中查找元素的个数。如果有返回1,否则返回0。
(8)rbegin():在反向迭代器中表示起始元素。
(9)rend():在反向迭代器中表示末尾元素。
(10)operator[key]:通过键值(key)获取该key对应的value。
(11)lower_bound(val):返回容器中第一个值【大于或等于】val的元素的iterator位置。
(12)upper_bound(val):返回容器中第一个值【大于】。
(13)max_size():返回set中最多包含的元素个数。
【例】
#include<iostream>
#include<stdlib.h>
#include<set>
using namespace std;
void TestSet1()
{
//用set对数组中的元素去重,并排序
int array[] = { 1, 2, 3, 3, 4, 2, 8, 2, 1, 4, 5, 7, 6, 9 };
set<int> set1;
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
set1.insert(array[i]);
}
cout << "set的size值为:"<< set1.size() << endl;
cout << "set的maxsize的值为:" << set1.max_size() << endl;
cout << "set中的第一个元素为:" << *set1.begin() << endl;
//cout << "set中的最后一个元素为:" << *set1.end() << endl;
cout << "set的元素有:";
set<int>::iterator iter = set1.begin();
while (iter != set1.end())
{
cout << *iter << " ";
iter++;
}
cout << endl;
//使用erase删除元素1
set1.erase(1);
cout << "使用erase删除元素1后,set的size值为:" << set1.size() << endl;
//使用STL算法find元素1
iter = find(set1.begin(), set1.end(), 1);
if (iter == set1.end())
{
cout << "1 is not in set!" << endl;
}
else
{
cout << "1 is in set!" << endl;
}
set1.clear();
if (set1.empty())
{
cout << "set.clear()后,set为空!" << endl;
}
cout << "set的size值为:" << set1.size() << endl;
cout << "set的maxsize的值为:" << set1.max_size() << endl;
}
int main()
{
TestSet1();
system("pause");
return 0;
}
运行结果为:
注意:
1)set中的元素不能直接修改。
2)begin()和end()函数是不检查set是否为空的,使用钱最好使用empty()检查set是否为空。