1、待排序中的元素作数组的下标或map的键值

例题:PAT甲级_1141 PAT Ranking of Institutions

#include<bits/stdc++.h>
using namespace std;
const int maxn = ; struct Node {
int personNum = ;
int scoreB = , scoreA = , scoreT = ;
int score;
}; map<string, Node> mp;
vector<string> ansSchoolName; bool cmp(string a, string b) {
if (mp[a].score != mp[b].score) return mp[a].score > mp[b].score;
else return mp[a].personNum < mp[b].personNum;
}
int main() {
int n;
scanf("%d", &n);
int score;
string id, schoolName;
for (int i = ; i < n; i++) {
cin >> id >> score >> schoolName;
transform(schoolName.begin(), schoolName.end(), schoolName.begin(), ::tolower);
mp[schoolName].personNum++;
if (id[] == 'A') mp[schoolName].scoreA += score;
else if (id[] == 'B') mp[schoolName].scoreB += score;
else mp[schoolName].scoreT += score;
}
for (auto it = mp.begin(); it != mp.end(); it++) {
ansSchoolName.push_back(it->first);
it->second.score = (int)(it->second.scoreA + it->second.scoreB / 1.5 + it->second.scoreT*1.5);
}
sort(ansSchoolName.begin(), ansSchoolName.end(), cmp);
int r = ;
printf("%d", ansSchoolName.size());
for (int i = ; i < ansSchoolName.size(); i++) {
if (i > && mp[ansSchoolName[i]].score != mp[ansSchoolName[i - ]].score) {
r = i + ;
}
printf("%d %s %d %d\n", r, ansSchoolName[i].c_str(), mp[ansSchoolName[i]].score, mp[ansSchoolName[i]].personNum);
}
return ; }

8、sort排序中比较函数的几种应用方式的更多相关文章

  1. spring 整合 mybatis 中数据源的几种配置方式

    因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapp ...

  2. Django中提供的6种缓存方式

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  3. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出“欢迎下次光临” 在网页中弹出框输入1   网页输出“查询中……” 在 ...

  4. Springboot中IDE支持两种打包方式,即jar包和war包

    Springboot中IDE支持两种打包方式,即jar包和war包 打包之前修改pom.xml中的packaging节点,改为jar或者war    在项目的根目录执行maven 命令clean pa ...

  5. JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解

    在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...

  6. Vue中常用的几种传值方式

    Vue中常用的几种传值方式 1. 父传子 父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为da ...

  7. sort排序中的坑

    问题的产生原因: 在一篇阿里面试题的跟帖中,很多人应用sort()方法对数组进行排序.看似合情合理的代码,运行结果却频频出错.为什么呢?因为很多人都忽略掉了一点,那就是sort()排序默认情况下是按A ...

  8. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  9. JAVA中单例模式的几种实现方式

    1 线程不安全的实现方法 首先介绍java中最基本的单例模式实现方式,我们可以在一些初级的java书中看到.这种实现方法不是线程安全的,所以在项目实践中如果涉及到线程安全就不会使用这种方式.但是如果不 ...

随机推荐

  1. selenium java 文件上传、下载

    1.webdriver对页面文件的下载 我们一般操作浏览器下载时会让我们选择下载的目录然后经过一系列操作后才进行文件下载操作,但是用webdriver不能按这样的方式操作.经过查询资料找到了如下的实现 ...

  2. loj#2059. 「TJOI / HEOI2016」字符串 sam+线段树合并+倍增

    题意:给你一个子串,m次询问,每次给你abcd,问你子串sa-b的所有子串和子串sc-d的最长公共前缀是多长 题解:首先要求两个子串的最长公共前缀就是把反过来插入变成最长公共后缀,两个节点在paren ...

  3. 【IDE】我的花里胡哨VS

    我的 VS2017 效果图,花里胡哨但十分养眼,利于C/C++ Coding~ 一.主题设置 工具 → 扩展和更新 下载插件 Color Theme Editor for Visual Studio ...

  4. Android代码安全工具集

    前言 原计划出一系列APP测试文章,从基础发,整个思路还在整理,秉着吹牛的态度,整理了一部分安卓代码安全的工具推荐给大家玩玩,提升一下逼格. 在这之前给大家讲讲阿旺对安全测试的理解,不管别人怎么扯,一 ...

  5. vs2013打包安装程序

    安装扩展包Visual Studio Installer VS2013下默认是没有Visual Studio Installer的,需要安装对应的扩展包: 下载地址:VS2013安装向导扩展包下载 安 ...

  6. S2T40,第四章,简答4

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. Python中的yield生成器的简单介绍

    Python yield 使用浅析(整理自:廖 雪峰, 软件工程师, HP 2012 年 11 月 22 日 ) 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关 ...

  8. dos语法

    一)MD——建立子目录 1.功能:创建新的子目录 2.类型:内部命令 3.格式:MD[盘符:][路径名]〈子目录名〉 4.使用说明: (1)“盘符”:指定要建立子目录的磁盘驱动器字母,若省略,则为当前 ...

  9. C# 引用类型公共变量的影响

    public int[] a =new int[2]; private void button1_Click(object sender, EventArgs e) { bing(a); } priv ...

  10. 入门项目 A2 setting

    import os # 因为setting是设置模块,存放的是一些和系统关联的一些信息,比如对C,D盘符的路径调用 BASE_PATH = os.path.dirname(os.path.dirnam ...