C++ map练习
C++ STL之map
map介绍
C++里的map数据结构,会存储键值对信息key-value,通过key得到value的信息。map的key与value有一个特点就是:每个唯一的key拥有唯一对应的value,不会出现多组value与之对应。
它和其他标准模板容器不同的是,初始化它的时候要提供两个数据类型。
比如:
map<string,int> dict;
前面一个string是key的数据类型,后者int为value的数据类型。
它的操作和属性和常见的容器差不多,像empty()、size()、begin()......
这里需要重点提一下的是它的插入操作。
map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一个元素会被视为键值,第二个元素会被视为实值。
map<int ,string> maplive;
插入操作1
pair<int,string> value(1,"a");maplive.insert(value);
等价于maplive.insert(pair<int,string>(1,"a"));
插入操作2
maplive.insert(map<int,string>::value_type(1,"a"));
插入操作3
maplive[1]="a";//map中最简单最常用的插入添加!
题目练习
题目描述
输入一些单词,找出所有满足如下条件的单词:
该单词不能通过字母重排,得到输入文本中的另外一个单词。
在判断是否满足条件时,不区分大小写,但输出保留输入中的大小写,按字典序进行排列(所有大写字母在小写字母的前面)
样例输入:
ladder came tape soon leader acme RIDE lone Dreis peat
ScALE orb eye Rides dealer NotE derail LaCeS drIed
noel dire Disk mace Rob dires
样例输出:
Disk
NotE
derail
drIed
eye
ladder
soon
#define LOCAL
#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> words;
map<string,int> cnt;
string repr(const string& str){//standardize
string ans=str;//!注意点1
for(int i=0;i<str.length();i++){
ans[i]=tolower(str[i]);
}
sort(ans.begin(),ans.end());//!注意点2
return ans;
}
int main(){
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
string str;
while(cin>>str){
if(str[0]=='#')break;
words.push_back(str);
string r=repr(str);
if(!cnt.count(r)) cnt[r]=0;//!注意点3
cnt[r]++;
}
vector<string>ans;
//iterate vector words
for(vector<string>::iterator it=words.begin();it!=words.end();++it){
if(cnt[repr(*it)]==1) ans.push_back(*it);
}
sort(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++){
cout<<ans[i];
}
}
注意点如下详细解释:
- 在对字符串进行标准化的时候,注意必须要对ans进行初始化。如这样
string ans;
是不行的。另外c++中的string真的是一等公民,既可以用下标对每一个字符进行赋值,也可以把整个字符串进行赋值,非常方便。 - sort函数输入两个参数,起始位置。但是它并不会返回什么的,不要以为它会返回数组的begin位置。
- 第三个注意点,我们这里使用的是
cnt.count(r)
,count函数只有两个返回值(0 or 1)。如果map中有这个key,那么count就返回1,没有那么就返回0。在这里if里面的判断条件可以用!cnt[r]
来替换,因为如果map中没有这个key,通过[ ]读取,它的返回值是0。所以它们的效果等同。
C++ map练习的更多相关文章
- mapreduce中一个map多个输入路径
package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- 多用多学之Java中的Set,List,Map
很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析
在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...
- MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程
在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...
- MapReduce剖析笔记之五:Map与Reduce任务分配过程
在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
随机推荐
- C++类继承--继承后函数的值
类的继承会首先寻找基类,若基类未实现,则会寻找派生类的函数 1. class继承,函数不继承 #include <stdio.h> class Base { public: Base(){ ...
- freebsd默认不是gcc构建
xunsearch在freebsd上死活装不上,用gcc编译通过. freebsd默认不是gcc编译工程,所以下个gcc ./configure CC=gcc48 编译. 觉得clang编译器不可能有 ...
- Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
- 139.00.007 Git学习-Cheat Sheet
@(139 - Environment Settings | 环境配置) Git虽然极其强大,命令繁多,但常用的就那么十来个,掌握好这十几个常用命令,你已经可以得心应手地使用Git了. 友情附赠国外网 ...
- ajax post data 获取不到数据,注意content-type的设置post/get
因为之前一直用jQuery ajax get的方式传递参数, 默认没有设置过 contentType 的值. $.ajax({ url: "/yuanjin/jianxiang", ...
- CentOS 附加软件包
本人初学 CentOS,安装软件与 windows 下区别很大,大部分得通过 yum install xxx .这有个问题,一方面 yum 资源有限,另一方面 yum 默认装的版本较低.比如 Cent ...
- undo表空间不足,ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃: 问题分析:本问题在ORACLE系统管理中属于比较正常的一现象,产生问题的原因主要以下两点: 1. 有较大的事务量让Oracl ...
- 面对IBM与亚马逊的犄角攻势,微软云如何招架?
亚马逊AWS和微软Azure是全球公有云的焦点.不就前公布的财报不久前公布的财报,这两家公司云计算的收入越来越接近,从数据显示来看,亚马逊的利润比微软稍高,有人称微软云的高增长来自于捆绑销售,背后真正 ...
- npm install warning: no description; no repository field
npm install 报错:warning no description; no repository field 开始以为必须npm init,npm init在git bash(win7)里,还 ...
- Yii2用Gii自动生成Module+Model+CRUD
1. 开启gii模块 common/config/main-local.php加入下面代码 return [ 'modules' => [ 'gii' => [ 'class' => ...