这是我参与更文挑战的第10天,活动详情查看: 更文挑战
set容器
1. set基本概念
和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等,底层是一个二叉树。
当用set容器进行存储键值对时,只需要提供一组数据即可,例如{‘a’,’b’,’c’}
与map类似,set中也会自行根据键的大小来对存储的键值进行排序。由于键key与value相同,根据key排序,和根据value排序没区别。
同时,与map中不允许有相同的key值类似,set中元素值不能相同。
对于初学者来说,切勿尝试直接修改 set 容器中已存储元素的值,这很有可能破坏 set 容器中元素的有序性,最正确的修改 set 容器中元素值的做法是:先删除该元素,然后再添加一个修改后的元素。
2. set基本构造方法
#include <iostream>
#include <set>
#include <string>
using namespace std;
void printSet(set<string>&s)
{
for(set<string>::iterator it = s.begin();it != s.end(); it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
//构造一个string类型set容器
set<string> myset;
//向容器中插入元素
myset.insert("allen");
myset.insert("Bob");
myset.insert("Keylle");
//无论怎样的插入顺序,结果都会安装AscII顺序输出
printSet(myset);
//删除容器中值为Bob的元素
myset.erase("Bob");
printSet(myset);
//用一个set容器初始化另一个set容器
set<string> copySet(myset);
printSet(copySet);
}
int main(){
test01();
return 0;
}
复制代码
输出结果:
Bob Keylle allen
Keylle allen
Keylle allen
复制代码
3.set容器的基本用法
(1)begin()
返回set容器的第一个元素,使用的时候加指针, 如*myset.begin();
(2) end()
返回set容器的最后一个元素,使用的时候加指针,如 *myset.end();
还要注意begin() 和 end()函数是不检查set是否为空的,使用前最好使用empty()检验一下set是否为空.
(3) clear()
删除set容器中的所有的元素。
(4) empty()
判断set容器是否为空。
(5) max_size()
返回set容器可能包含的元素最大数目。
(6)size()
返回当前set容器中的元素个数。
(7)rbegin()
返回的值和end()相同。
(8) rend()
返回的值和begin()相同.
(9) count()
本来用来查找set中某个某个键值出现的次数。这个在set中并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END