set和map都是关联式容器
先介绍两个值:
键值:key 实值:value
set特性:所有的元素都会根据元素的键值(key)自动的被排序。对于set元素来说键值就是实值,实值就是键值,set不允许两个元素有相同的键值(我们不能通过set的迭代器去修改set的元素,原因后面会解释)
map特性:所有的元素都会根据元素的键值(key)自动的被排序,map的所有元素都是pair,同时拥有实值(value)和键值(key),pair的第一个元素被视为键值,第二个元素被视为实值,map不允许两个元素拥有相同键值。(可以通过map的迭代器修改实值,不能修改键值)。
实际上pair的结构体为:
template<class K,class V>
struct pair
{
k first;
v second;
}
set
我们先来看一下set的成员函数:
int a[5] = { 0, 1, 2, 4, 3 };
set<int> set1();//建立一个空set
set<int> set2(a, a + 5);//指定范围的set
set<int> set3(set2);//拷贝构造函数
set<int> set4(set2.begin(),set2.end());//使用了迭代器来构造set4
set<int> set5 = set3;//赋值运算符重载
迭代器:
set的迭代器(左闭右开)
这里begin是指向首元素,end指向的是最后一个元素的下一个位置
rbegin和rend是倒过来的。即,rbegin是最后一个元素,rend是首元素的上一个位置
cbegin和cend是const迭代器
crbegin和crend返回的是倒过来的const迭代器。
这里使用begin和end来举例子
set<int>::iterator it = s2.begin();
while (it != s2.end())
{
cout << *it << endl;
++it;
}
遍历刚才s2,输出结果