文章目录

  • map 定义
    • 测试结果
  • map排序

map 定义

哈希表(Hash Table,也叫散列表),是根据关键字key 直接进行访问的数据结构,它通过把关键字值映射到表中一个位置(数组下标)来直接访问,以加快查找关键字值的速度。这个映射函数称为哈希(散列)函数,存放记录的数组叫做哈希(散列)表。

最简单的应用是字母的映射,通过ASCII码值。

#include<iostream>
#include<string>
using namespace std;int main()
{int char_map[128]={0};string str="abcdefgaaxxy";for(int i=0;i<str.length();i++)char_map[str[i]]++;for(int i=0;i<128;i++){if(char_map[i]>0)cout<<(char)i<<" "<<i<<" "<<char_map[i]<<endl;}}

测试结果

从左到右:字符,ASCII码值,出现次数

例如,第一行的含义是:字母a,其ASCII码值是97,出现的次数是3次。

map排序

map排序只能按照键排序,不能按照值排序

我是把map复制到vector中进行排序
下面代码是按键排序

map<char,int> mp;
vector<pair<char,int> > ans(mp.begin(),mp.end());//构造函数
sort(ans.begin(),ans.end());//从小到大

打印结果

vector<pair<char,int> > ::iterator iter;//迭代器
for(iter=ans.begin();iter!=ans.end();iter++){cout<<(iter->first)<<" "<<iter->second<<endl;//输出pair的元素}

按键排序结果

键/值
A 3
B 2
C 1
D 3
F 2
G 2
H 2
I 2
J 3
K 2
L 3
M 3
N 1
P 6
R 1
S 2
U 1
V 2
W 2
X 2
Y 2

如果想按照自己的意愿排序,可以把map放进其他容器,比如vector<pair<char,int> >中,使用sort函数第三个参数来自定义排序

map<char,int> mp;
vector<pair<char,int> > ans(mp.begin(),mp.end());//构造函数
sort(ans.begin(),ans.end(),cmp);//自定义排序

其中cmp函数:首先按照值从大到小排序;如果值相等,则按照键的字典序(从小到大)排序。

bool cmp(const pair<char,int> &a,const pair<char,int> &b){if(a.second==b.second) return a.first<b.first;//若相等,字典序从小到大 return a.second>b.second;//从大到小
}

按值排序结果

键/值
P 6
A 3
D 3
J 3
L 3
M 3
B 2
F 2
G 2
H 2
I 2
K 2
S 2
V 2
W 2
X 2
Y 2
C 1
N 1
R 1
U 1

一道map的题目

链接:https://ac.nowcoder.com/acm/contest/5912/C
来源:牛客网

题目描述
Every problem maker has a flower in their heart out of love for ACM. As a famous problem maker, hery also has a flower.
Hery define string T as flower-string if T appears more than twice in string S and |T| = k. Hery wants you to find how many flower-string in S.
输入描述:
The first line contains a string S consist of ’f’, ’l’, ’o’, ’w’, ’e’, ’r’ and an integer k.
(1 ≤ |S| ≤ 10^5, 1 ≤ k ≤ 100)

输出描述:
Output an integer m in the first line, the number of flower − string in S.
Next m lines, each line contains a flower-string and the lexicographical order of them should be from small to large

分析:长度为k的子串的个数。遍历字符串
注意string类不要用scanf读入。substr(i,k)函数是返回首下标是i,长度是k子串。

ac代码

#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
typedef long long ll;int k;
string a;
map<string,int> mp;vector<string> v;int main(){cin>>a>>k;int len=a.size();for(int i=0;i+k-1<len;i++)mp[a.substr(i,k)]++;for(auto m:mp)if(m.second>2) v.push_back(m.first);sort(v.begin(),v.end());cout<<v.size()<<endl;for(auto x:v){cout<<x<<endl;}}

参考博客:map按照值排序

C++容器map可以排序吗?相关推荐

  1. C++ STL容器 map禁止自动排序

    背景:key-value形式的数据,已经使用了map存储,后来要求读取时的顺序要和插入的顺序一致   方案一.再定义个数组,按顺序保存key (推荐)   方案二.map更换为unordered_ma ...

  2. C++知识点30——使用C++标准库(关联容器map及其初始化,赋值,查找,添加,删除与迭代器失效)

    一.关联容器简介 关于顺序容器和关联容器的区别已经在博客https://blog.csdn.net/Master_Cui/article/details/107427911中提过 C++标准库中的关联 ...

  3. C++|STL学习笔记-对STL中关联容器map的进一步认识

    关联容器map key + value 的值 关联容器 = 有序容器(红黑树) + 无序容器(散列表) + hash_map 有序容器中: map的键值是不允许重复的 multimap的键值是允许重复 ...

  4. C++ STL容器 —— map/multimap 用法详解

    C++ STL容器 -- map/multimap 用法详解 写在前面:近期正在学习C++的STL容器,因此在这里做一下日志记录,主要介绍一些容器基本成员函数的用法, 配上实际用例,并不涉及原理.但别 ...

  5. Java8 对Map进行排序

    前言: 随着Java 8 的 Stream 之后推出后可以很优雅实现Map的排序. 示例: final Map<String, Integer> wordCounts = new Hash ...

  6. 深入分析 Jdk - 集合容器 Map 与 Set

    SegmentFault 不兼容部分 markdown,详情请见 深入分析 Jdk - 集合容器 Map 与 Set

  7. 200922阶段一C++关联容器map

    目录 一.学习的知识点 关联容器 map 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 四.作业的思路.不会的地方 五.其他需要反馈的问题 一.学习的知识点 关联容器 通过保存在数据项中的索 ...

  8. java map 值排序_使用Java8 Stream API对Map类型按照键或值进行排序

    在这篇文章中,您将学习如何使用Java对Map按照键或值进行排序.前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题.所以我决定写这样一篇文章.在Ja ...

  9. 【java】关于Map的排序性的一次使用,有序的Map

    关于Map的排序性的一次使用,有序的Map >>>>> hashmap是按key的hash码排序的,而treemap是利用comparator 进行key的自然排序的 / ...

最新文章

  1. Spring MVC环境中的文件上传功能实现
  2. 神经尘埃、脑波打字…… 2018年的脑科学要研究什么?
  3. 转!mysql 查询 distinct多个字段 注意!!
  4. 系统中多种隐藏超级用户添加方法第1/2页
  5. 计算机二级vb重点知识,计算机二级《VB》历年考试重点知识
  6. 理解python并发编程_Python并发编程很简单
  7. 记一次 .NET 某市附属医院 Web程序 偶发性CPU爆高分析
  8. php使用邮件找回密码,php利用Zend_Mail发送邮件(实现邮件重设密码功能)
  9. 好用到让设计师尖叫的UI设计网格素材
  10. 实高斯随机向量与复高斯随机向量
  11. 国内破解站点大全! -by[http://blog.csdn.net/netxiaoyue]
  12. 使用Simian工具扫描重复代码
  13. 【娱乐】你以为我在水群?其实我在内卷。(qq、微信自动发消息脚本)
  14. yum安装报错No package xxx available
  15. 跳槽遇到背景调查,你可以这样做!
  16. 计算机运行慢提速小技巧,教你为Win7系统加速的五个技巧
  17. python+opencv 批量修改视频分辨率
  18. linux dns劫持转发,linux的dns被劫持
  19. 基于java的圆通快递单号自动识别api接口代码实例
  20. slam十四讲-ch6-非线性优化(包含手写高斯牛顿、使用g2o库、使用ceres库三种方法的源码详细注释)

热门文章

  1. android 入门-Android Permission denied(不允许连接Socket) 错误
  2. 安装ubuntu时将boot目录单独挂载的意义
  3. 关于WebBrowser.DocumentCompleted事件
  4. python中reduce是什么意思,python中的map和reduce有什么不同
  5. python 多元线性回归_Python机器学习,多元线性回归分析问题
  6. STM32 电机教程 16 - PMSM电机磁场定向控制原理
  7. Linux数据报文接收发送总结7
  8. 2016年定制维护组总结-历程回溯
  9. 基于FPGA的OLED屏幕开发
  10. 数字预失真技术基本原理