用vector实现map按value排列

STL中的Map和Vector的内部实现 两个关键大小: 大小:size=_Mylast - _Myfirst; 容量:capacity=_Myend - _Myfirst; 分别对应于resize()、reserve()两个函数。 size表示vector中已有元素的个数,容量表示vector最多可存储的元素的个数;为了降低二次分配时的成本,vector实际配置的大小可能比客户需求的更大一些,以备将来扩充,这就是容量的概念。即... 阅读详情

笔记:用vector实现map按value排列

问题描述

map自动按照key的大小顺序进行存储。因而作为key的类型必须能够进行大小运算的比较。比如int、double、string、char等类型。
但是,如果要按照value进行存储,可以考虑两种方式:
1.把value换成key;
2.利用vector< pair >类型。

以下示例为字符排序,输入一个只包含小写英文字母和数字的字符串。输出一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int cmp(const pair<char, int>& x, const pair<char, int>& y)  
{  
	if(x.second==y.second)   //如果二者second相等,则按ASCII顺序输出first比较小的那个
        return x.first<y.first;
    return x.second > y.second; //如果second不等。大的先输出
}
int main()
{
    string str;
    while(getline(cin,str))
    {   map<char,int>imap;
        for(int i=0;i<str.size();i++)
        {
            imap[str[i]]+=1;
        }
        vector<pair<char,int>> ivec;     //创建一个pair类型的vector用于排序second
        for (map<char, int>::iterator curr = imap.begin(); curr != imap.end(); curr++)
		    ivec.push_back(make_pair(curr->first, curr->second));
		//vector的创建可以直接初始化
		//vector<pair<char,int>> ivec(imap.begin(),imap.end());
        sort(ivec.begin(),ivec.end(),cmp); //创建int型cmp排序准则
        for(int i=0;i<ivec.size();i++)
            cout<<ivec[i].first;
    }
    cout<<endl;
    return 0;
}

题目来自:
字符统计
策略参照:
月饼题目:c++对map进行排序

220404更新:
遍历vector:找最大值

int maxx=0;
vector<int>ivec;
for(auto &a:ivec)
{
  maxx=max(maxx,a);
}

遍历map找最大value值

int maxx=0;
map<int,int>imap;
for(auto [x,y]:imap)
{
  maxx=max(maxx,y);
}
STL容器排序技巧:从pair到map的进阶应用 本文深入探讨了C++中STL容器的排序技巧,重点介绍了pair和map的进阶应用。通过详细解析默认排序行为、自定义排序规则实现方式以及混合容器的高级排序策略,帮助开发者优化数据处理效率。文章还提供了性能优化建议和常见陷阱解决方案,是提升STL使用技能的实用指南。 阅读详情

相关推荐

Map 按照Value降序排列(C++)

在使用C++中的Map时,想要对Map进行排序,而Map默认的是按照key值来排序,如果需要对Key值进行排序,则 需要自己来更换一个容器,方法有很多,比较推荐的做法是使用vector ***********************************************************************************************分割线***

chenfujunku的专栏 4370

关于map和vector容器的简单使用

一:map的定义: map<a1,a2>mp:与其他STL容器在定义上不一样,因为map需要确定映射前类型既是:键key和映射后类型既是:值value 所以需要在<>内填写两个类型: 其中一个是键的类型 第二个是值得类型 头文件: #include <map> map容器会根据键的大小来排。 map常用函数: 1.find():find(key)返回键是key的映射值 2.erase():删除元素。 3.size():用来获得map中映射多少个 4.clear():清

qq_51917627的博客 1510

麒麟系统grub被锁怎么办?双密码遗忘救援指南(实测V10 SP3版本)

本文详细介绍了麒麟系统V10 SP3版本在GRUB和root密码双遗忘情况下的救援指南。通过ISO镜像进入救援模式,结合单用户模式操作,实现密码重置与系统权限恢复,特别适用于等保合规环境。

385

C++中vector可以作为map的键值

因为项目中需要根据状态找到一个对应的结果,就采用了map的结构,但是状态本身较为复杂,存在一个vector中。上次使用map的经验是自定义类类型作为键值必须重载<操作符,因为map的快速查找是基于红黑树的构建,因而键值必须能相互之间比较。所以担心vector作为类类型的键值会引发一些错误,就写了一个例子测试。结果证明vector可以直接作为map的键值使用。#include<iostream> #i

DARKMOON的专栏 1万+

零基础搭建本地AI绘画环境:Stable Diffusion 3.5保姆级安装教程(含中文优化方案)

本文提供零基础搭建本地AI绘画环境的详细教程,重点介绍Stable Diffusion 3.5的安装与中文优化方案。从硬件配置检查到软件依赖安装,再到核心组件配置与中文语义增强,教程涵盖全流程操作指南,帮助用户快速掌握AI文生图模型的本地部署技巧,提升创作效率。

weixin_30752699的博客 312

SAP增强实施-第四代显式和隐式增强技术介绍

概念介绍 SAP第四代增强- Enhancement-Point,分为2种显式增强和隐式增强,显式增强就是手动加入到程序中的Enhancement options,隐式增强就是系统内置的Enhancement options。 第四代增强其实是第三代上的加强,都属于面向对象语言的接口技术的应用,但第四代增强使SAP增强实施更具灵活性,四代增强可以直接在源代码里面写增强了代码了,输入参数也不像 二代...

weixin_40672823的博客 7953

基于Vector实现的Map类 《C++程序设计语言》第13章

《C++程序设计语言》 习题13.9[8] 这是一道关于C++模板机制的不错的练习,是对模板实例化、模板专门化的漂亮展示。特别地,它考察了对关联容器Map类的理解(尽管这里的Map类只是基于Vector类的包装)。 同其他很多习题一样,这道题在《习题解答》里面也没有给出解答。。或许根本就没有所谓的“标准答案”,这也是国外的教育方式与国内的差异所在。 先来看一下11.8节的Assoc类

laochen46的专栏 1151

MATLAB库函数unwrap(相位解卷绕)的C语言实现

什么是相位解卷绕 Q = unwrap(P) Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unw

业精于勤,荒于嬉 4247

求教:map的value为vector类型时,使用iter->second会报错

/程序目的:用户通过user_query()输入一个str,然后我们在families中寻找str这个key,并打印出与之相对的vector<string>中所有元素。我将map设置为<string,vector<string>>,然后在给打印vector的display函数传参iter->second时报错。这里可以看到it->second的类型确实是vector<string>,那么为什么不能传给display函数呢?

G_JEMINI的博客 540

ROCm rocr-libhsakmt分析系列1-2:多GPU跨卡VRAM访问机制分析

本文基于ROCr-Runtime的libhsakmt库源码,深入分析了多GPU系统中跨设备内存访问的实现机制。主要内容包括: 实现流程概述:通过P2P拓扑发现、统一虚拟地址空间、页表映射和硬件转发四个步骤,实现零拷贝的跨GPU内存访问。

图形/计算GPU的驱动与虚拟化技术分享园地 2505

银行一表通监管报送系统详解

国家金融监管总局对于“一表通”的总体描述为:通过建立一套明细级、标准化的数据体系和汇总计算规则,将银行机构传送至监管可信区的业务明细数据汇总生成财务指标、监管指标和监管报表,大幅提升监管数据时效性,统一数据标准,实现数据间的穿透和整合,同时改变机构多头报送数据模式,减轻机构报送负担。

银行信息系统应用架构详解 2517

map或set容器 按value值进行排序

map和set容器如何使用value进行排序 为什么要这么做? ​ map的两个值分别为key值和value值,map是按照key值进行排序的,但有时候需要按照value值进行排序,并且按照value的顺序输出key值; 例如“: map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map<string, int&gt

m0_51011333的博客 2401

【测开求职】面试题:计算机网络 详细版整理

本篇文章是笔者为准备研究生复试和校招而写,因此主要针对问答,注重理解,而不在于细节计算。读者可以先查看上面的链接走一遍计算机网络的整体框架结构。其中,重点难点以及易混淆的知识点,笔者会用其他文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 5936

STL 中map按value排序

STL 中map按value排序 总结一下大体思路 大家都知道map是有序容器,但它本身是按照key升序排列,而我们有时候需要的是按value排序,有需求就有实现 将map添加到vector容器中,这样我们就可以针对每一项进行操作,进行比较 通过for循环实现map转移进vector中 通过自定义函数sort()进行排序,这里函数体return中&lt;代表返回升序排列,如果你要降序排列,那么你...

qq_42807079的博客 1428

【1】Java 部分笔试题解析

解析A.abstract关键字应该放在class关键字之前。C.抽象方法不能有方法体。D缺少了class关键字。

博客 3941

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

map按value值排序

map按value值排序 map默认按key值排序 令map按value值排序,可以将map转存到vector中,再对vector进行排序。 将map转存到vector中 map<string, int> demo; // 假设demo中已经存在了部分数据 // 将 map(demo) 转存到 vector(ans) 中 vector<pair<string, int>> ans(demo.begin(), demp.end()); 对vector进行排序 // 排序

weixin_53524786的博客 851

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++ map容器 根据value的值进行排序

map容器会自动根据key的值进行排序,要想要map容器中的内容根据value中的值进行排序 可先把map中的内容拷贝到vector容器中,然后再用sort排序 PointCloud.h typedef struct PitArea { int PointNum; float height; }Pit; static bool cmp_by_value(const pair<int,P...

yanzhenyu2019的博客 1416

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

map按value排序

map按value排序#include <iostream> #include <vector> #include <map> #include <string> #include <algorithm> using namespace std; typedef pair<string,int> PAIR;bool cmp_by_value(const PAIR& lhs, const P

莫伊的博客 401

c++之map排序

c++之map排序 为了实现查找,map在插值时已经对key值进行了排序(使用红黑树结构)。如果想对map的value值进行排序,由于sort函数只可以对有序容器进行排序,那么可以将map转为vector后进行排序。 #include <iostream> #include <map> #include <algorithm> // 对map不能直接排序, 使...

weixin_30418341的博客 477

412-C++中map自定义key和value排序

map默认是按key值从小到大排序的map容器里面有两个值一个key一个是value,,其实map里面还有第三个参数,是一个类,用来对map的key进行排序的类,定义如下: less的代码: 那么根据上面的代码我们也可以写出一个greater类来让key按照降序排列:注意:这里也可以不使用MyCompare 仿函数,直接用greater 将map的key和value以pair的形式装到vector中,对vector进行排序。 (下面使用unordered_map,而没有使用map) 这是从小......

Edward_LF的博客 870

浅谈下利用vector对map进行一种排序

pair可以将两个数据放在一起,跟结构体似的,位于第一个的数据是key,这相当与一个索引,位于第二个的相当于key对应的值。//这种方法,可以将a中的元素拷贝到b中。我们都知道在STL种map是对key进行一种升序。那么如果我们想对得到map中value进行排序呢。那访问索引就是 a.first,访问值就是a.second啦。比如:pair<string,int>a("abc",3);然后就可以用sort对arr进行排序啦。

a1748250的博客 470

map的自定义排序

由于需要用到map的自定义排序,所以去学习了下,一起分享给大家看看,自定义排序的关键在于下列代码的自定义函数的cmp里面,可以选择自己想要的排序方式,我这个的自定义排序是先根据value的降序进行排序,如果遇到value的值一样就按照key的升序进行排序,贴出我的代码。 #include&lt;iostream&gt; #include&lt;map&gt; #include&lt;algori...

qq_41006871的博客 1734

c++map遍历排序

遍历map也有迭代器 1 2 3 4 map<char, int> ::iterator it; for (map<char, int> ::iterator it = ma.begin(); it != ma.end(); it ++){ cout << it->first << ' ' << it...

你轻轻地走了 3488

重构排序算法中的排序规则

而在C++中map和multimap都是对key进行的排序,优先说明:map是包含key和value 的映射。

weixin_50905568的博客 224

自定义map排序---Key,Value

A:对key值排序 B:对value值排序 C:迭代器,输出 A: 对key值排序 1,   常用类型如 int, string 等,可自动对Key值排序 map<int,double,less< int > > mp;    //按int升序 map<int,double,greater< int > > mp;    //按int降序 map<string,i

weixin_45705885的博客 276
上一篇: LIO-SAM跑KITTI
hellopopyee
博客等级 码龄8年 6粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值