- C++
关于pair的相关讨论
- 2025-8-1 22:38:08 @
I 什么是pair?
定义
pair类似与一个简单的哈希表本质上是将两个东西打包成一个东西;
pair写起来也很简单,即
pair<A, B> num(a, b);
其中,A,B代表这两个类型(比如int, double, string, 包括自定义类型); a, b代表要打包的两个数,要与A,B类型相对应
操作
有一个pair类型的数num, 我们可以通过num.first, num.second来访问num对应的第一个值和第二个值
II pair的特点
排序
如果将一个vector的类型设定为pair,那么把他排序一下会怎么样呢?
在前人的经验上,我们可以发现pair的排序是按照:先后-字典(字典排序规则见文末)的顺序。什么意思呢?
比如一个pair的数num,组成他的两个类型分别是string, int,那么排序的时候就会按照string->int的顺序比较
举个例子,A(a, 10), B(ab, 5)两个数,按照上述所言,先比较a和ab,可以得出B > A, 所以直接返回。
这会导致什么呢?一个名字-成绩系统,如果你按照名字-成绩(string-int)的样式创建,那么会出现:
名叫AAA的学生考了60分,名叫BBBB的学生考了100分,排序是反而出现AAA排在BBBB的前面,大错特错!!!
有的帅逼就要问了,这种东西不是小狗都会吗?
呵呵,详见T1371. 看病
III 补充
字典序
对于两个不同的字符串,从左到右逐个比较它们的字符,
如果在某个位置上它们的字符不同,则将它们按照该位置上的字符的字母顺序进行排序,即较小的字符排在前面,较大的字符排在后面。 如果一直比较到其中一个字符串结束,则较短的字符串排在前面; 如果两个字符串完全相同,则它们的字典序相同。可以将它们看作是按照字母表的顺序进行排列的。