1、利用自定义的排序函数

通过传递一个函数 cmp给sort函数 , 注意: cmp中return a<b; 决定为从小到大的排序

                        return a>b;  决定为从大到小的排序

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include <vector>
#include<string>
using namespace std; bool cmp(const pair<int, char> a, const pair<int, char> b) {
return a.first<b.first;//自定义的比较函数
} int main()
{
vector<pair<int, char>> p;
p.push_back(make_pair(, 'a'));
p.push_back(make_pair(, 'c'));
p.push_back(make_pair(, 't'));
p.push_back(make_pair(, 'y'));
p.push_back(make_pair(, 'b')); sort(p.begin(), p.end(), cmp);//按照第一个元素排序
for (auto i = ; i<p.size(); i++)
cout << p[i].first << " " << p[i].second << endl;
system("pause"); return ;
}

2、自定义字符串的排序函数

(1)排序的比较方式,长度相同则字母排序,否则长度排序

  在函数中定义时不用将比较函数定义为静态成员函数。

//排序的比较方式,长度相同则字母排序,否则长度排序
bool compare( string s1, string s2)
{
if (s1.size() == s2.size())
return s1 < s2;
else if (s1.size() < s2.size())
return true;
return false;
}

(2)字符串数组排成最小的数

  在c++类中自定义比较函数时,需注意类中比较函数声明为静态成员函数。

static bool compare(const string& a,const string& b)
{
string s1 = a+b;
string s2 = b+a;
return s1<s2;
}

3、举例:调整塔的高度

给出塔的数量n和调整最大次数k,以及每个塔的高度,在有限次数内调整塔的高度,使最大塔差最小。

输入:3 2

5 8 5

输出:0 2

2 1

2 3

  使用pair结构保存数据。

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include <vector>
#include<string>
#include<map>
using namespace std; bool cmp(pair<int, int>& a, pair<int, int>& b) {
// 开始没写这个 if,卡在 20% ,加上100%
// 减的时候,先拿编号大的;加的时候,先拿编号小的
if (a.second == b.second) {
return a.first > b.first;
}
return a.second > b.second;
} int main()
{
int n, k;
while (cin >> n >> k)
{
vector<pair<int, int>> nums;
vector<pair<int, int>> res;
for (int i = ; i < n; ++i)
{
int temp;
cin >> temp;
nums.push_back(make_pair(i + , temp));
}
for (int i = ; i < k; ++i)
{
sort(nums.begin(), nums.end(), cmp);
if (nums[].second - nums[n - ].second <= )
break;
nums[].second--;
nums[n - ].second++;
res.push_back(make_pair(nums[].first, nums[n - ].first));
}
sort(nums.begin(), nums.end(), cmp);
cout << nums[].second - nums[n - ].second << " " << res.size() << endl;
for (int i = ; i < res.size(); ++i)
{
cout << res[i].first << " " << res[i].second << endl;
}
} system("pause");
return ;
}

C++(十二)— vector中pair的排序方法的更多相关文章

  1. vector中pair的排序方法

    直接上代码: bool judge(const pair<int,char> a, const pair<int ,char> b) { return a.first<b ...

  2. VECTOR中pair的排序

    vector中pair的排序方法 首先定义一个vector vector<pair<int,char> >vec; 调用排序函数sort sort(vec.begin(),ve ...

  3. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  4. OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa

    元数据最本质.最抽象的定义为:data about data (关于数据的数据).它是一种广泛存在的现象,在许多领域有其具体的定义和应用. JDBC中的元数据,有数据库元数据(DatabaseMeta ...

  5. “全栈2019”Java多线程第十二章:后台线程setDaemon()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由Route&Navigation

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  7. Java笔记(十二)……类中各部分加载顺序及存放位置问题

    什么时候会加载类 使用到类中的内容时加载,三种情况: 创建对象:new StaticDemo(); 使用类中的静态成员:StaticCode.num = 9;  StaticCode.getNum() ...

  8. Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...

  9. C语言中常见的排序方法

    在C语言中,常见的排序方法有冒泡法,排序法,插入法等等.所谓的冒泡法,就是对一组数字进行从大到小或者从小到大的一种排序方法.主要就是相邻的数值相互交换.从第一个数值开始,如果这相邻的两个数值排序与我们 ...

随机推荐

  1. hadoop学习第二天-了解HDFS的基本概念&&分布式集群的搭建&&HDFS基本命令的使用

    一.HDFS的相关基本概念 1.数据块 1.在HDFS中,文件诶切分成固定大小的数据块,默认大小为64MB(hadoop2.x以后是128M),也可以自己配置. 2.为何数据块如此大,因为数据传输时间 ...

  2. 【python】判断字符串以什么开头或结尾

    项目中用到python判断一个字符串是否以某个字符串结尾,比如,筛选一个目录下所有以.mp4结尾的文件. >>> item = "demo.mp4" >&g ...

  3. Binary Search in Java

    关于折半查找中的几个注意点. Version 1: public static <T extends Comparable<? super T>> int binSearch( ...

  4. 使用Compute Engine工具连接Linux VM

    Links: Connecting to Linux Instances 内容: 要连接Linux VM实例,必须要有一个SSH(Secure Shell)秘钥.无论何时连接一个LinuxVM实例(通 ...

  5. python中的关键字global和nonlocal

    知识点: global将一个变量变为全局变量 nonlocal改变最近的变量,又不是全局作用. 1.global 在python中,当引用一个变量的时候,对这个变量的搜索按找本地作用域(Local). ...

  6. ORA-28002 the password will expire

    ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

  7. flex 实现图片播放 方案二 把临时3张图片预加载放入内存

    该方案,是预加载:前一张,当前,下一张图片,一共3张图片放入内存中.这样对内存的消耗可以非常小,加载之后的图片就释放内存. 下面示例一个是类ImagePlayers,一个是index.mxml pac ...

  8. Keepalived 主备配置

    keepalived主备或多主多备,配置都是一样配置方法,只是搭建多少的问题. 1.keepalived安装 参考:https://www.cnblogs.com/zwcry/p/9542867.ht ...

  9. 【HackerRank】Bus Station

    有n组好朋友在公交车站前排队.第i组有ai个人.还有一辆公交车在路线上行驶.公交车的容量大小为x,即它可以同时运载x个人. 当车站来车时(车总是空载过来),一些组从会队头开始走向公交车. 当然,同一组 ...

  10. Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录认证及退出)解决方案

    最近的项目中涉及到了应用ajax请求后台系统登录,身份认证失败,经过不断的调试终于找到解决方案. 应用场景: 项目测试环境:前端应用HTML,js,jQuery ajax请求,部署在Apache服务器 ...