HM230 人物排位

HM230 人物排位

HM230 人物排位

来源: 第 230 集 set容器-自定义数据类型指定排序规则

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

自定义类型(例如同时有姓名、年龄的人物)放进 set 时,默认的“从小到大”无从下手:编译器不知道该比姓名还是比年龄,插入会直接失败。因此**必须**用仿函数指定排序规则,否则插不进去。

人物有两个公开成员:姓名 m_Name、年龄 m_Age,并用构造函数赋初值。仿函数是一个类,重载 operator(),返回布尔值。形参是两个 const Person &:对比过程中不得修改对象,并用引用避免拷贝。若要按年龄降序,当前一个人年龄更大时返回真。

把仿函数类型写进 set 的第二个模板参数。遍历时的迭代器类型也要带上这个比较器。通过迭代器访问成员用箭头:it->m_Nameit->m_Age

比较器只看年龄。若两个人年龄相同,集合视为同一元素,后插入的进不去。

读入若干人物并插入该集合,按集合顺序输出姓名与年龄。

输入格式

第一行一个整数 \(n\)。

接下来 \(n\) 行,每行一个不含空白的姓名和一个整数年龄。

输出格式

共若干行,每行一个人物的姓名和年龄,中间一个空格,顺序为年龄从大到小。

样例

输入 #1

4
LiuBei 24
GuanYu 28
ZhangFei 25
ZhaoYun 21

输出 #1

GuanYu 28
ZhangFei 25
LiuBei 24
ZhaoYun 21

输入 #2

3
ZhangSan 20
LiSi 20
WangWu 18

输出 #2

ZhangSan 20
WangWu 18

说明

\(1 \le n \le 1000\),姓名长度不超过 \(20\),由大小写字母组成,年龄为 \(1\) 到 \(120\)。

不要把人物放进 vectorsort。必须使用带仿函数的 set,在插入时按年龄降序落点。样例 #2 两人同为 \(20\) 岁,只保留先插入的 ZhangSan

信息

ID
1229
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者