STL之map篇
度熊所居住的 D 国,是一个完全尊重人权的国度。以至于这个国家的所有人命名自己的名字都非常奇怪。一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的每一个字符串,也都是这个人的名字。例如,如果一个人名字是 ACM,那么 AMC, CAM, MAC, MCA, 等也都是这个人的名字。在这个国家中,没有两个名字相同的人。
度熊想统计这个国家的人口数量,请帮助度熊设计一个程序,用来统计每一个人在之前被统计过多少次。
这里包括一组测试数据,第一行包含一个正整数N,接下来的N 行代表了 N个名字。N 不会超过100,000,他们的名字不会超过40位.
对于每输入的一个人名,输出一个整数,代表这个人之前被统计了多少次。
5
ACM
MAC
BBA
ACM
BAB
0
1
0
2
1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<string>
#include<iterator>
using namespace std;
bool compare(char c1,char c2)
{
return c1 <= c2;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
map<string,int> msi;
for(int i=;i<n;++i)
{
char temp[];
scanf("%s",temp);
sort(temp,temp+strlen(temp),compare);
string str(temp);
//使用find来判断map中是否含有该key
map<string,int>::iterator it = msi.find(str);
if(it==msi.end())
{
//使用pair来判断是否插入成功
pair<map<string,int>::iterator,bool> res = msi.insert(pair<string,int>(str,));
if(res.second==true)
{
cout<<"OK"<<endl;
}
else
{
cout<<"FALSE"<<endl;
}
}
else
{
msi[str]++;
}
printf("%d\n",msi[str]);
} }
return ;
}
1.如何判断map插入成功或者失败:pair<map<string,int>::iterator,bool> res = msi.insert(pair<string,int>(key,value)); res.second的值
2.如何判断map中是否包含某key:map<string,int>::iterator it = msi.find(key); 判断it == msi.end();
3.msi[key] = value;如果key没有被insert过,会通过该式子进行insert。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<map>
#include<iterator>
#include<algorithm>
using namespace std; int main()
{
int n;
while(~scanf("%d",&n),n)
{
map<string,int> msi;
for(int i=;i<n;++i)
{
char cstr[];
scanf("%s",cstr);
string str(cstr);
map<string,int>::iterator it = msi.find(str);
if(it != msi.end())
{
++msi[str];
}
else
{
msi[str] = ;
}
}
string strResult;
int maxnum = ;
map<string,int>::iterator it;
for(it = msi.begin();it != msi.end();it++)
{
if(it->second > maxnum)
{
maxnum = it -> second;
strResult = it -> first;
}
}
printf("%s\n",strResult.c_str());
}
return ;
}
1、map的insert是默认以key排序的
2、map没有sort方法。
STL之map篇的更多相关文章
- STL中map与hash_map容器的选择收藏
这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...
- [STL] Implement "map", "set"
练习热身 Ref: STL中map的数据结构 C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Re ...
- STL之map与pair与unordered_map常用函数详解
STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称 ...
- C++ STL中Map的按Key排序和按Value排序
map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区 分),我们用map来进 ...
- STL中map与hash_map的比较
1. map : C++的STL中map是使用树来做查找算法; 时间复杂度:O(log2N) 2. hash_map : 使用hash表来排列配对,hash表是使用关键字来计算表位置; 时间复杂度:O ...
- STL中map,set的基本用法示例
本文主要是使用了STL中德map和set两个容器,使用了它们本身的一些功能函数(包括迭代器),介绍了它们的基本使用方式,是一个使用熟悉的过程. map的基本使用: #include "std ...
- C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET
C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...
- STL之map排序
描述 STL的map中存储了字符串以及对应出现的次数,请分别根据字符串顺序从小到大排序和出现次数从小到大排序. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { ...
- C++中的STL中map用法详解(转)
原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解 Map是STL的一个关联容器,它提供 ...
随机推荐
- 2.5.3 简单的 echo 输出
echo的任务就是产生输出,可用来提示用户,或是用来产生数据供进一步处理. 原始的echo命令只会将参数打印到标准输出,参数之间以一个空格隔开,并以换行符号(newline)结尾. ...
- Spring MVC 单元测试Demo
@RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations={" ...
- JavaSE 学习笔记之String字符串(十四)
API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源 ...
- 树状数组&线段树
先是树状数组. 令这棵树的结点编号为C1,C2...Cn.令每个结点的值为这棵树的值的总和,那么容易发现: C1 = A1 C2 = A1 + A2 C3 = A3 C4 = A1 + A2 + A3 ...
- poj 1724 最短路+优先队列(两个约束条件)
/*两个约束条件求最短路,用优先队列*/ #include<stdio.h> #include<string.h> #include<queue> using na ...
- linux 内核 2.5-4.7 版本change
https://kernelnewbies.org/LinuxVersions?action=show&redirect=Linux26Changes https://kernelnewbie ...
- SQL 用户定义表类型,在存储过程里使用数据类型作參数
在数据库编程里使用数据类型,能够提高代码的重用性.它们常常被使用在方法和存储过程中.使用数据类型,我们能够避免在存储过程里定义一串的參数,让人眼花缭乱,它就相当于面向对象语言里.向一个方法里传入一个对 ...
- HPU 1002 A + B Problem II【大数】
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 大数据处理之道(实验方法<二>)
一:交叉验证(crossvalidation)(附实验的三种方法)方法简单介绍 (1) 定义:交叉验证(Cross-validation)主要用于建模应用中,比如PCR(Principal Com ...
- @Validated数据校验
//lastName必须是邮箱格式 @Email private String lastName;