借用这一水题来熟悉map的操作,以前以为看过c++ primer,对map虽然不熟悉但用还是会用的,实际上手发现不是那么回事,还是有很多坑的

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#pragma warning ( disable : 4996 ) using namespace std; int Max( int a, int b ) { return a>b?a:b; }
int Min( int a, int b ) { return a>b?b:a; } const int inf = 0x3f3f3f3f;
const int maxn = 1e5+; map<string, int> cnt;
vector<string> words;
vector<string> ans; string getStr( const string& s )
{
string ans = s;
for ( int i = ; i < ans.length(); i++ )
ans[i] = tolower(ans[i]);
sort( ans.begin(), ans.end() );
return ans;
} int main()
{
string str, tmp;
while ( cin >> str )
{
if (str[] == '#') break;
words.push_back(str);
tmp = getStr(str);
if (!cnt.count(tmp))
cnt[tmp] = ;
cnt[tmp]++;
} for( int i = ; i < words.size(); i++ )
if( cnt[getStr(words[i])] == )
ans.push_back(words[i]); sort( ans.begin(), ans.end() );
for( int i = ; i < ans.size(); i++ )
cout << ans[i] << endl; return ;
}

map<key, value>以前一直对这种表示方式不太熟悉,没记清楚。


Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,并且查找的时间复杂度是log级别的

map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。

对于迭代器来说,可以修改实值,而不能修改key。


 ① 要注意的是map的插入方式,常用的有两种

map<int, string> M;
M.insert(pair<int, string>( , "xxx" ); //第一种
M[] = "yyy"; //第二种

第一种是创建一个pair对象插入,第二个是使用数组插入。

第一种:凡是使用insert函数插入map的,当关键字重复时(map中已经有同样的key),插入是失败的,也就是说map里面的关键字的值不会被覆盖。

第二种:数组插入会覆盖原来map里面的关键字的值,比如第一次插入map[1] = "xxx", 第二次插入map[1] = "yyy",实际上最后map[1]对应的值是yyy

使用count 和find

map.count(key)返回map中该关键字的个数,事实上只有两种可能,map中有该key值则返回1,否则返回0,

map.find(key) 返回该key值位置的迭代器,没有返回map.end();

注意以上查找函数都是查找KEY值的,别去查找value了

map 的使用 UVA156的更多相关文章

  1. UVa-156 Ananagrams(map映射)

    #include <iostream> #include <algorithm> #include <cmath> #include <cstdio> ...

  2. UVa-156 Ananagrams 反片语【map】【vector】

    题目链接:https://vjudge.net/contest/211547#problem/D 题目大意: 输入一些单词,找出所有满足以下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一些 ...

  3. UVa156 Ananagrams(映射map)

    Ananagrams 题目 Most crossword puzzle fans are used to anagrams--groups of words with the same letters ...

  4. 5_4 反片语(UVa156)<map的使用>

    输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词.在判断是否满足条件时,字母不区分大小写,但在输出的时候保留输入时的大小写,按字典序进行排列. 样例输入: ...

  5. 【UVA - 156 】Ananagrams (set,map,vector)

    Ananagrams  Descriptions: Most crossword puzzle fans are used to anagrams--groups of words with the ...

  6. UVA Ananagrams /// map set

    https://vjudge.net/problem/UVA-156 题目大意: 输入文本,找出所有满足条件的单词——该单词不能通过字母重排而得到输入的文本中的另外一个单词. 在判断是否满足条件时,字 ...

  7. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  8. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  9. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

随机推荐

  1. <爬虫>黑板爬虫闯关01

    import requests from lxml import etree import time ''' 黑板爬虫闯关 网址:http://www.heibanke.com/lesson/craw ...

  2. Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析

    关于NameNode高可靠需要配置的文件有core-site.xml和hdfs-site.xml 关于ResourceManager高可靠需要配置的文件有yarn-site.xml 逻辑结构: Nam ...

  3. 自己新机器安装CM时候 server服务启动DB配置

    com.cloudera.cmf.db.type=mysqlcom.cloudera.cmf.db.host=localhost:3306com.cloudera.cmf.db.name=cmfcom ...

  4. Johnson–Lindenstrauss 定理-Johnson–Lindenstrauss lemma

    Johnson–Lindenstrauss 定理是这样的:一个一百万维空间里的随便一万个点,一定可以几乎被装进一个几十维的子空间里! 严格说来是这样:在 M 维空间中的 N 个点,几乎总是被包含在一个 ...

  5. Windows相关命令

    1.查看端口8080被哪个进程占用 netstat -ano | findstr "8080" 2.查看进程号为5768对应的进程 tasklist | findstr " ...

  6. 期望——邮票收集问题lightoj1342

    邮票手机问题: 有n种类型的邮票,问将所有的类型的邮票全部收集起来所要的收集次数期望是多少. 设dp[i]为已经收集了i种类型的票,还要收集n-i种的次数的期望. dp[n]=0; 递推式: dp[i ...

  7. Workman-Thrift疑问解析

    Workman是纯纯的PHP实现的一套网络通信框架,Workman-Thrift则是以Workman为基础,为Thrift RPC实现网络通信.经过学习与测试,现把自己的疑问与验证记录下来: 问题一: ...

  8. PAT甲级——1072 Gas Station

    A gas station has to be built at such a location that the minimum distance between the station and a ...

  9. 03_Hibernate关系映射

    关系映射? Hibernate的主要目的就是JAVA程序员可以随心所欲的使用对象编程思维来操作数据库.一些数据库表的关系我们应该可以通过hibernate实现,比如数据库中用到的主外键关系,还有一些与 ...

  10. java基础之BigDecimal类

    由于在运算的时候,float类型和double很容易丢失精度,演示案例.所以,为了能精确的表示.计算浮点数,Java提供了BigDecimal BigDecimal类概述 不可变的.任意精度的有符号十 ...