要解决这个问题,我们可以使用C++的标准库中的std::sort
函数,并提供一个自定义的比较函数。这个比较函数将会检查两个元素的第一个值是否相等,如果相等,则根据第二个值的逆序进行排序。
下面是一个简单的示例代码,展示了如何实现这个功能:
#include <iostream>
#include <vector>
#include <algorithm>
// 自定义比较函数
bool compare(const std::pair<int, int>& a, const std::pair<int, int>& b) {
if (a.first == b.first) {
return a.second > b.second; // 如果第一个元素相等,按第二个元素的逆序排序
}
return a.first < b.first; // 如果第一个元素不等,按第一个元素的升序排序
}
int main() {
std::vector<std::pair<int, int>> vec = {{1, 2}, {3, 4}, {1, 3}, {3, 2}, {1, 1}};
// 使用自定义比较函数进行排序
std::sort(vec.begin(), vec.end(), compare);
// 输出排序后的向量
for (const auto& p : vec) {
std::cout << "(" << p.first << ", " << p.second << ")" << std::endl;
}
return 0;
}
在这个例子中,我们定义了一个compare
函数,它接受两个std::pair<int, int>
类型的参数,并返回一个布尔值。这个函数首先检查两个pair的第一个元素是否相等,如果相等,则比较第二个元素,并返回a.second > b.second
的结果,这样就可以实现第二个元素的逆序排序。如果第一个元素不相等,则按照第一个元素的升序排序。
然后,我们使用std::sort
函数对向量进行排序,并传入我们的自定义比较函数compare
。
最后,我们遍历排序后的向量并打印出来。
这个方法可以很容易地扩展到其他类型的pair或者自定义类型,只需要修改比较函数以适应不同的数据类型和排序需求。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云