借用这一水题来熟悉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. java空和非空判断

    public static boolean isEmpty(String str){ if("".equals(str)||str==null){ return true; }el ...

  2. 【树剖】CF916E Jamie and Tree

    好吧这其实应该不是树剖... 因为只要求子树就够了,dfs就好了 大概就是记录一个全局根root 多画几幅图会发现修改时x,y以root为根时的lca为以1为根时的lca(x,y),lca(root, ...

  3. QVaraint类

    一.QVaraint简介     QVaraint类作为一个包含了大多数Qt普通类型的的联合体类.因为c++联合体没有构造函数和析构函数的,许多继承的Qt类不能够在联合体当中使用.(联合体当中的变量共 ...

  4. redis笔记_源码_内存分配

    文件:zmoalloc.h zmoalloc.c 1.求两个整数的余数 eg: 求_n对sizeof(long)的余数(_n&(sizeof(long)-1)), 性能提升为50%-100% ...

  5. 「题解」:[AHOI2012] 树屋阶梯

    A掉了第一道题然后就去肝第四题,被路过的Larry大神看到了. L:你怎么还没过掉第三题? 我:…… L:快我帮你过掉! 他拉下来我第一题的码,手改了两个参数,半分钟后:AC …… 然后我就理所当然的 ...

  6. 在vc2008 mfcC++中使用sqlite的示例

    http://owlman.org/?p=890 在C++中使用sqlite的示例 2011年8月5日admin发表评论阅读评论 最近因为工作原因,终于使我有机会腾出时间来接触了一下SQLite数据库 ...

  7. C++编程规范和编译过程详解

    前言:因为c++基础打得不牢,所以准备花点时间再学一下c++的基础知识,主要是看网易云课堂里面的免费课程,把一些知识点做个笔记记下来. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  8. VUE下echarts宽度响应式

    window.addEventListener("resize", () => { myChart2.resize();});

  9. redis深入学习(二)-----redis配置文件、持久化

    redis配置文件 地址 units单位 a  配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bitb  对大小写不敏感 GENERAL通用 1.daemonize 2.pidf ...

  10. GitHub for Visual Studio使用讲解

    从VS2015起(应该是吧?),微软已经在VS中集成了GitHub,方便开发者对项目进行版本控制. 扩展包下载地址:https://aka.ms/ghfvs 其实VS2015的安装包中已经自带了这个扩 ...