C++学习笔记--STL(映射:map)
来源:互联网 发布:node.js 开发web的优势 编辑:程序博客网 时间:2024/06/05 14:50
一、map就是从键(key)到值(value)的映射。
二、关于map的方法
begin() – 返回指向map头部的迭代器
clear() –删除所有元素
count() –返回指定元素出现的次数
empty() –如果map为空则返回true
end() –返回指向map末尾的迭代器
equal_range() –返回特殊条目的迭代器对
erase() –删除一个元素
find() –查找一个元素
get_allocator() –返回map的配置器
insert() –插入元素
key_comp() –返回比较元素key的函数
lower_bound() –返回键值>=给定元素的第一个位置
max_size() –返回可以容纳的最大元素个数
rbegin() –返回一个指向map尾部的逆向迭代器
rend() –返回一个指向map头部的逆向迭代器
size() –返回map中元素的个数
swap() –交换两个map
upper_bound() –返回键值>给定元素的第一个位置
value_comp() –返回比较元素value的函数
三、map的应用
一道竞赛题目:输入一些单词,以#表示输入结束,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不区分大小写,但在输出时应保留输入中的大小写,按字典序进行排序(所有大写字母在所有小写字母的前面)。
代码设计分析:把每个单词“标准化”,即将每个单词全部转化为小写字母后再进行排序,然后再放到map中进行统计。
解答代码:
#include <iostream>#include <map>#include <string>#include <vector>#include <algorithm>//#include <ctype.h> 查阅API时,发现tolower()是需要这个头文件的,但在用dev运行时,发现不用这个头文件也可通过编译 using namespace std;map<string, int> cnt; //以标准化后的单词为key, 以key的个数作为key的值 vector<string> words; //保存输入的单词 string repr(const string& s){//将单词标准化,即将单词全部转为小写字母后,再进行排序 string ans = s; for(int i=0; i<ans.length(); i++){ ans[i] = tolower(ans[i]); //将第i个字母转化为小写字母 } sort(ans.begin(), ans.end()); //对字母排序 return ans;}int main(){ int n =0; string s; while(cin>>s){ //输入字符窜,当输入#时,表示输入结束 if(s[0]=='#') break; words.push_back(s); //将输入的单词放进数组words中 string r=repr(s); //将单词标准化 //count()函数返回map中键值等于key的元素的个数。 if(!cnt.count(r)) cnt[r] = 0; //如果映射cnt数组中不存在这个标准化单词,则给这个key的值设为0 cnt[r] ++; //key的值加1 } vector<string> ans; //用此函数来保存满足要求的单词 for(int i=0; i<words.size(); i++){ //循环输入并保存在words中的单词 if(cnt[repr(words[i])] ==1 ) { //如果这个单词标准化后,作为cnt的key,看对应的值是否为1,如果为1,则说明该单词不能通过字母重排得到文本中的另外一个单词 ans.push_back(words[i]); // 将符合要求的单词放进ans中 } } sort(ans.begin(), ans.end()); //对数组中的单词进行排序 for(int i=0; i<ans.size(); i++){ cout<<ans[i]<<"\n"; //输出排序结果 } return 0;}
- C++学习笔记--STL(映射:map)
- 学习笔记-Map映射
- C++stl map学习
- 学习笔记 STL Map
- hibernate学习笔记(map映射)
- C++STL之map学习
- C++STL之map学习
- C++学习笔记 stl map
- STL中的map学习笔记
- 11/7/8 STL 映射容器 map< K , T > 学习笔记
- C++STL学习笔记
- C++STL学习笔记
- 使用C++STL的map容器实现一种命令映射
- 【C++】STL常用容器总结之八:映射map
- C++STL学习(5)容器map和multimap
- 【C/C++】STL学习笔记
- hibernate学习笔记(map,set,list映射)
- C++ STL--map映照容器学习笔记
- MB466光驱位改下SSD硬盘
- 另一个前端优化
- GCD笔记和问题汇总
- 线程
- POJ 3414 BFS 模拟求最快方式
- C++学习笔记--STL(映射:map)
- 项目记录25--unity-tolua框架 View02---BasePanel.lua
- 数据库范式
- 产品经理必备软件——Axure使用详解(2)
- 《JAVA常用算法手册》 算法经典题 3.鸡兔同笼
- 2016 qut第一次训练赛简单题
- jdbc连接mysql的方法
- getScrollx/getScrollY的理解
- 多线程状态下加载网络图片,以及取消子线程加载图片,开启线程的两种方式