C++容器(五):set类型
2015-10-02 12:15
471 查看
set
类型
map容器是键-值对的集合,好比以任命为键的地址和电话号码。而
set容器只是单纯的键的集合。当只想知道一个值是否存在时,使用
set容器是最适合。
使用
set容器必须包含
set头文件:
[code]#include <set>
set容器支持大部分
map操作,包括:
关联容器中通用的操作。
三种构造函数。
insert操作。
count和
find操作。
erase操作。
另外,还有些例外,包括:
set不支持下标操作符,而且没有定义
mapped_type类型。在
set容器中,
value_type不是
pair类型,而是与
key_type相同的类型。
1 set
容器的定义和使用
与map一样,
set容器存储的键也必须唯一,且不能修改。以一段范围内的元素初始化
set对象,或在
set对象中插入一组元素时,对于每个键,事实上都只添加了一个元素:
[code]// define a vector with 20 elements, holding two copies of each number from 0 to 9 vector<int> ivec(20); for ( int i=0; i<10; ++i ) { ivec[2*i] = i; ivec[2*i+1] = i; } // iset holds unique elements form ivec set<int> iset( ivec.begin(), ivec.end() ); cout << ivec.size() << endl; // prints 20 cout << iset.size() << endl; // prints 10
上段代码,首先创建了一个名为
ivec的
int型
vector容器,存储20个元素:0~9(包括9)中每个整数都出现了2次,然后用
ivec中所有的元素初始化一个
int型的
set容器,且这个
set容器仅含有10个不同的元素。
2 在set
容器中添加元素
[code]// first set<string> mySet; // empty set mySet.insert("the"); // mySet now has one element mySet.insert("and"); // mySet now has two elements // second set<int> mySet2; // empty set mySet2.insert( ivec.begin(), ivec.end() ); // mySet2 has 10 elements
3 从set
中获取元素
set容器不提供下标操作符。为了通过键从
set中获取元素,可使用
find运算。如果只需简单地判断某元素是否存在,同样可以使用
count运算,当然其返回值只能是1(存在)或0(不存在):
[code]iset.find(1); // returns iterator that refers to the element with key == 1 iset.find(11); // returns iterator == iset.end() iset.count(1); // returns 1 iset.count(11); // returns 0
set中的键为
const类型,在获得指向
set中某元素的迭代器后,只能对其做读操作,而不能做写操作:
[code]// iter refers to the element with key == 1 set<int>::iterator iter = iset.find(1); *iter = 11; // error; keys in a set are read-only cout << *iter << endl; // ok; can read the key
其他操作就不再累述。
参考文献:
《C++ Primer中文版(第四版)》,Stanley B.Lippman et al. 著, 人民邮电出版社,2013。
相关文章推荐
- 文章标题
- 一起talk C栗子吧(第五十回:C语言实例--最小生成树二)
- 【一套C语言控制台的输出框代码】
- C++源代码免杀之函数的动态调用
- 复习C++
- C/C++ | sizeof
- c++ primer 学习之路 二 —— 实验楼作业笔记(1-3)
- 项目26.1 成绩等级
- C/C++ 数组负数下标 - 反向寻址
- #LeetCode# #C++# Binary Tree Postorder Traversal
- C++关于引用的说明
- 自己用C语言写PIC16单片机的serial bootloader
- c++中的 堆和栈
- C++ 对象模型具体评论(特别easy理解力)
- 编程语言学习:C++学习日记0 热身
- Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)
- 程序设计基石与实践之C语言内存地址基础
- C语言循环数组做FIFO队列
- C++常见面试题30道
- java第一次上机实验和C++之间的比对