C++map和set的简单理解和使用案例
来源:互联网 发布:linux自建kms 编辑:程序博客网 时间:2024/05/14 14:17
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。来自:点击打开链接
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
构造set集合主要目的是为了快速检索,不可直接去修改键值。
关于map的文档:点击打开链接
关于set的文档:点击打开链接
输出顺序按内部树的结构输出方式。
/* * 计算输入的不同单词的个数 * 运用map和set关联容器 * map的特点是其下标不必为整数(通过键来查值) * 如我们想知道对应的学生列表 姓名-学号 * 那我们可以用map<string,long> 利用姓名(string)就可以查出对应的值(long) * * 下面的例子:输入5个string并输出对应字符串出现的次数 */#include <iostream>#include <map>#include <cstddef>#include <set>using namespace std;int main(){ map<string , size_t>word_count;//键值对,键和值的映射关系 string word; int i=0; //限制输入为5个string while(1){ if(i++>4) break; cin>>word; ++word_count[word];//这里的word是指的输入的string串,不是一个数字索引, //word对应的字符串被当作键值对的键录入,并对键值对所对应的值(word_count[word])++操作; } //这样对应的键值对 //如果我将word_count[word]中的word改为word_count["word"]这样我的输入就都加到了word所对应的键值对了 for(auto &w:word_count) cout << w.first <<"\t出现次数 "<< w.second<<endl;//first为保存关键字的数据成员,second为保存对应值的数据成员 return 0;}
下面是记录输入除set容器包含的键外的单词出现次数:
int main(){ map<string, size_t> word_count; set<string> exclude={"the","a","an" "The","A","An"}; string word; int i=0; while(1){ if(i++>4) break; cin>>word; if(exclude.find(word) == exclude.end())//没有查到find会返回尾迭代器,证明没找到 ++word_count[word]; } for(auto &w:word_count) cout << w.first <<"\t出现次数 "<< w.second<<endl; return 0;}
阅读全文
0 0
- C++map和set的简单理解和使用案例
- map和set的简单使用
- Map和Set简单使用
- Javascript中Map和Set的理解和使用
- set和map的使用
- 关于map和set的浅显理解
- set 和 map 的一些理解
- List 、Set 和Map的简单讲解
- map和set的使用和原理
- 简单理解List、set、Map接口之间的联系和区别?
- list、set、Map的区别和使用
- ECMAScript6标准Set和Map的使用
- 容器set和map的使用
- 【STL】map和set的使用
- AngularJs的简单理解和案例
- List、Map、Set的理解(LinkedList和ArrayList、Vector和ArrayList、HashMap和HashTable和HashSet区别与使用)
- List、Map、Set的理解(LinkedList和ArrayList、Vector和ArrayList、HashMap和HashTable和HashSet区别与使用)
- 综合使用map和set
- [LeetCode]350. Intersection of Two Arrays II
- JavaScript中的this的一些用法
- JAVA 服务端和客户端Socket通信的简单例子
- 微机原理 2.2 实验报告及过程分析
- Console.read()、Console.readline()、Console.readkey()和Console.Write、Console.Writeline()的意思
- C++map和set的简单理解和使用案例
- 购物车页面(模板)
- 论html标签中的style="visibility:visible"
- 使用css中的white-space:pre-wrap;让html浏览器显示空白空格符
- Try...catch的用法
- HiHoCoder 1181 浅谈fleury算法求解无向图欧拉路径
- Java——IO异常处理
- sufficient statistic 充分统计量
- 排查在 Azure 中新建 Windows VM 时遇到的部署问题