如果我有一个vector<pair<int,int> >
数据类型,那么按对的第一个元素排序然后按第二个(如果第一个元素相等)对它进行排序的公认方法是什么?例如可能是 (1,10), (3,3), (7,13), (7,16), (8,1), (8,2), (15,2) 等等。
问问题
19363 次
2 回答
9
pair
s 默认情况下按第一个元素比较,然后是第二个。因此,如果您不关心在第一个元素比较相等时保留顺序,那么您可以使用std::sort
:
std::sort(v.begin(), v.end());
于 2013-08-03T04:06:24.240 回答
1
std::pair
s 比较运算符按字典顺序比较对,它首先比较第一个元素,然后如果第一个元素相等,则比较第二个元素。
下面是一个使用std::vector<std::pair<int, int>>
andstd::sort
的例子。
使用std::sort
这种方式使用std::pair
's operator <
,如上所述,它按字典顺序比较对。
更新: 这是一个使用std::stable_sort
自定义比较函数的示例,该函数仅比较第一个元素。
通过使用std::stable_sort
,可以保证保留相等元素的相对顺序。也就是说,即使 的第一个元素std::pairs
相等,仍然保留原始的相对顺序。
于 2013-08-03T04:08:52.353 回答