STL3—Set容器基础总结
来源:互联网 发布:金融数据分析师是什么 编辑:程序博客网 时间:2024/04/30 19:33
map容器是键-值对的集合,好比人名为键的地址和电话号码。相反的,set容器类型只是单纯的键的集合。当只想知道一个键是否存在时,使用set容器是最合适的。
set不支持下标操作符,而且没有定义mapped_type类型。在set容器中,value_type不是pair类型,而是与key_type相同的类型。
一、set容器的定义和使用
与map容器一样,set容器的每个键都只对应一个元素。以一段范围的元素初始化set对象,或在set对象中插入一组元素时,对于每个键,事实上都只是添加了一个元素:
- vector<int> ivec;
- for (int i = 0;i != 10; ++i)
- {
- ivec.push_back(i);
- ivec.push_back(i);
- }
- set<int> iset(ivec.begin(),ivec.end());
- cout << "ivec: " << ivec.size() << endl; //<这里注意在set中长度只有10,因为set中不能存储重复的数据
- cout << "iset: " << iset.size() << endl;
1、在set中添加元素
可以使用insert操作在set容器中添加元素:
- set<string> strSet;
- strSet.insert("utile");
- strSet.insert("world");
- for (set<string>::iterator iter = strSet.begin(); iter != strSet.end(); ++iter)
- {
- cout << *iter << endl;
- }
另一种用法:在调用insert函数时,提供一对迭代器实参,插入其标记范围内的所有的元素。该版本的insert函数类似于形参为一对迭代器的构造函数– 对于一个键,仅仅插入一个元素:
- set<int> iSet;
- iSet.insert(ivec.begin(),ivec.end());
与map容器的操作一样,带有一个键参数的insert版本返回pair类型对象,包含一个迭代器和一个bool值,迭代器指向拥有该键的元素,而bool值则表明是否添加了元素。
使用迭代器对的版本返回void类型。
2、从set中获取元素
set容器不提供下标操作符。为了通过键从set中获取元素,可使用find运算。如果只需简单地判断某个元素是否存在,
同样可以使用count运算,返回set中该键对应的元素个数。当然,对于set容器,count的返回值只能是1(该元素存在)或0(该元素不存在):
- cout << iSet.count(1) << endl;
- cout << iSet.count(11) << endl;
- cout << *iSet.find(1) << endl;
- if (iSet.find(11) != iSet.end()) //<find操作返回的是指向元素的迭代器,只是迭代器解引用就是键值
- {
- cout << *iSet.find(11) << endl;
- }
正如不能修改map中的元素的键部分一样,set中的键也为const。在获取指向set中某元素的迭代器之后,只能对其进行读操作:
- set<int>::iterator iter = iSet.find(1);
- *iter = 11; //Error
- cout << *iter << endl; //OK
在之前用map统计单词的数量的时候利用了map下标操作的特性,如果其键值不存在,那么就立即进行初始化
- //原程序
- void retricted_wc(ifstream &remove_file,map<string,int> &word_count)
- {
- set<string> excluded;
- string remove_word;
- while (remove_file >> remove_word)
- {
- excluded.insert(remove_word); //<现将一些不需要统计的单词放入set容器当中
- }
- string word;
- while (cin >> word)
- {
- if (!excluded.count(word)) //<先判断单词是否已经被排除
- {
- ++ word_count[word];
- }
- }
- }
0 0
- STL3—Set容器基础总结
- STL3—Set容器基础总结
- STL3-容器适配器
- set容器总结
- set容器总结
- c++ set容器总结
- Java容器—set
- STL2—关联容器map基础总结
- STL2—关联容器map基础总结
- Java基础总结-容器
- C++语法基础--关联容器--set
- stl之set集合容器应用基础
- java容器中list和set总结
- STL中的set容器的一点总结
- STL中的set容器的一点总结
- STL中的set容器的一点总结
- STL中的set容器的一点总结
- STL中的set容器的一点总结
- 条款 13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- springMVC的maven pom.xml实例一
- ios常见题
- [UVA11637] Garbage Remembering Exam && 概率
- STL2—关联容器map基础总结
- STL3—Set容器基础总结
- IIS7 WINDOWS2008的一些错误
- HDU 1236 排名
- windowsPE 1-7
- Microsoft .NET Micro Framework移植开发笔记1
- 如何把一个输入字符串转换成枚举类型
- STL7—迭代器
- JNI使用总结
- String类编译期与运行期分析