C++中Map常见用法以及按照value排序
今天做一个简单的算法题,居然用了1个小时,STL unordered_map用多了,没想到map这次派上了用场,这里记录一下:
算法题为 给一个字符串例如 abaaba,每连续两个字符组成一个子串 ab, ba, aa,ab,ba,统计出现的个数,按照个数大小排序打印,这里 ab 2次,ba两次,aa 1次,如果都是一样的次数,按照字典顺序打印,例如这里ab 和ba都是2次,那么先打印ab 然后是ba 最后 是aa;
算法:找出字串,然后用map记录这个string和它出现的个数,注意要用map不能用unordered_map,这样能保证是按照字典排序,然后再用一个稳定排序按照这个Map的key排序即可。
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <vector>
#include <unordered_map>
#include <map>
using namespace std;
typedef pair<string, int> PAIR;
int cmp(const PAIR &x, const PAIR &y)
{
return x.second > y.second;
}
void p (string& s) {
vector<string> vec;
;
; i < num; i++) {
);
vec.push_back(tmp);
}
sort (vec.begin(), vec.end());
map <string, int> tmp;
]= {};
] = {};
for (auto itr = vec.begin(); itr != vec.end(); itr ++) {
string val = *itr;
//cout << val << endl;
] - ] - 'a'] == true) {
tmp[val] = tmp[val] + ;
} else {
tmp[val] = ;
}
first[val[] - 'a'] = true;
sec[val[] - 'a'] = true;
}
vector <PAIR> pair_vec; //用pair来实现按照pair的第二个元素大小也就是value排序
for (auto it = tmp.begin(); it != tmp.end(); it++) {
pair_vec.push_back(make_pair(it->first, it->second));
}
stable_sort(pair_vec.begin(), pair_vec.end(), cmp);
for (auto curr = pair_vec.begin(); curr != pair_vec.end(); ++curr) {
cout << curr->first << endl;
}
}
int main() {
string s;
cin >> s;
p(s);
;
};
测试代码
mississippitennessee
输出:
ss
is
si
ee
en
es
ip
it
mi
ne
nn
pi
pp
se
te
C++中Map常见用法以及按照value排序的更多相关文章
- python map 常见用法
python map 常见用法2017年02月01日 19:32:41 淇怪君 阅读数:548版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/Tifficial/art ...
- STL map 常见用法详解
<算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...
- Linux中find常见用法
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- [转]Linux中find常见用法示例
Linux中find常见用法示例[转]·find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参 ...
- Linux中 find 常见用法示例
Linux中find常见用法示例 #find path -option [ -print ] [ -exec -ok command ] {} \; #-print 将查找到的文件输出到标准输出 #- ...
- C语言 · C++中map的用法详解
转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义 (1) map<string, int> Map ...
- STL中map的用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
- C++11中map的用法
最全的c++map的用法 1. map最基本的构造函数:map<string ,int>mapstring; map<int,string >mapint;map<sri ...
- [转]Java中Map的用法详解
转载地址:http://www.zhixing123.cn/jsp/30113.html Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictio ...
随机推荐
- Citrix 服务器虚拟化之三 Xenserver 网络管理
Citrix 服务器虚拟化之三 Xenserver 网络管理 每个Xenserver服务器都有一个或多个网络.XenServer 网络是虚拟的以太网交换机,它可以连接到外部接口(带或不带 VLAN 标 ...
- lucene 从2.4.0—3.6.0—4.3.1版本升级
一.从2.4升级到3.6 替换原因:由于使用IBM的jdk导致了查询出现不稳定现象,原因无法找到,只好升级版本,毕竟版本很低 1)替换中文分词器,由原来的MMAnaylze替换为IKAnaylze 2 ...
- 批处理清理VS工程目录(递归删除Debug, Release, ipch目录及*.sdf文件)
用VS写程序最烦的就是VS会产生一大堆乱七八糟的东西,如Degub, Release, ipch目录,还有sdf文件,这些东西占了很大的空间,在linux下编程的话一个make clean就可以很方便 ...
- linux下编译运行驱动
linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...
- Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解
osqueryd osqueryd(osquery daemon)是可以定期执行SQL查询和记录系统状态改变的驻守程序. osqueryd能够根据配置手机归档查询结果,并产生日志. 同时也可以使用系统 ...
- C#中常用关键字的作用
***new关键字:1.在堆中开辟空间 2.在开辟的空间中创建对象 3.调用对象的构造函数***this关键字:1.代表当前类的对象 2.调用自己的构造函数 ***return:1.立即结束本次方法2 ...
- C#_单例模式
单例:在程序的整个进程中只会被实例化一次 如:User user =new User();实例化一个User();的时候new User()是调用的 User类的 默认的公有构造函数:public U ...
- AI(三):微信与luis结合(上)
目录 基本原理 公众号申请及配置 验证服务器有效性 微信请求消息类型 基本原理 基本原理如上图:腾讯微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转 ...
- 为知笔记markdown插件安装
Wiz.Editor.md 是一个基于 Editor.md 构建的为知笔记 Markdown 插件. 主要特性 多种样式主题 支持实时预览 支持代码高亮 支持搜索替换 支持ToC目录 Tex数学公式 ...
- shell 字符串包含
转自:Shell判断字符串包含关系的几种方法 现在每次分析网站日志的时候都需要判断百度蜘蛛是不是真实的蜘蛛,nslookup之后需要判断结果中是否包含"baidu"字符串 以下给出 ...