C++关联容器之set类型——《C++ Primer》抄书笔记
set类型
map类型是键值对的集合,相反地,set容器只是单纯的键的结合。当只想知道一个值是否存在时,使用set容器就是最合适的。
set容器支持大部分的map操作:
- 关系运算,类似于string类型的关系运算
- 如果两个容器具有相同的长度而且所有元素都相等,那么这两个容器就相等;否则,不相等;
- 如果两个容器的长度不相等,但较短的容器中所有的元素都等于较长容器中对应的元素,则称较短的容器小于另一个;
- 如果连个容器都不是对方的初始子序列,则它们的比较结果取决于所比较的第一个不相等的元素
- begin、end、rbegin、rend操作
- 类型别名(typedef)
- swap和赋值操作。
- clear和erase操作。
- 容器大小的操作,如size(),max_size()等
- insert、count、find等
- set容器的定义和使用
必须包含set头文件
- 直接声明空的容器
- set<int> iset
- 以一段范围的元素初始化set对象
vector<int> ivec; for(vector<int>::size_type i = 0; i < 10; i++) { ivec.push_back(i); ivec.push_back(i); } set<int> set2(ivec.begin(), ivec.end()); for(set_it = set2.begin(); set_it != set2.end(); set_it++) { printf("%d\t", *set_it); } printf("\n");
1.1 在set中添加元素
vector<int> ivec2; for(vector<int>::size_type i = 10; i < 20; i++) { ivec2.push_back(i); ivec2.push_back(i); } set2.insert(0);//单个的插入 set2.insert(ivec2.begin(), ivec2.end());//范围插入 for(set_it = set2.begin(); set_it != set2.end(); set_it++) { printf("%d\t", *set_it); } printf("\n");
1.2从set中获取元素
set2.find(1); //returns iterator that refers to the element whit key == 1 set2.find(21); //returns iterator == set2.end() set2.count(1); //returns 1 set2.count(21); // returns 0