HM230 人物排位
HM230 人物排位
来源: 第 230 集 set容器-自定义数据类型指定排序规则
难度: 普及-
时间限制: 1s
空间限制: 64MB
题目描述
自定义类型(例如同时有姓名、年龄的人物)放进 set 时,默认的“从小到大”无从下手:编译器不知道该比姓名还是比年龄,插入会直接失败。因此**必须**用仿函数指定排序规则,否则插不进去。
人物有两个公开成员:姓名 m_Name、年龄 m_Age,并用构造函数赋初值。仿函数是一个类,重载 operator(),返回布尔值。形参是两个 const Person &:对比过程中不得修改对象,并用引用避免拷贝。若要按年龄降序,当前一个人年龄更大时返回真。
把仿函数类型写进 set 的第二个模板参数。遍历时的迭代器类型也要带上这个比较器。通过迭代器访问成员用箭头:it->m_Name、it->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\)。
不要把人物放进 vector 再 sort。必须使用带仿函数的 set,在插入时按年龄降序落点。样例 #2 两人同为 \(20\) 岁,只保留先插入的 ZhangSan。
信息
- ID
- 1229
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者