📅  最后修改于: 2023-12-03 15:14:02.076000             🧑  作者: Mango
在C++中,我们可以使用vector
容器来存储和操作一组数据。有时候,我们需要对这些数据进行排序,以满足各种需求。本文介绍如何在C++中使用vector
容器对对进行排序,按照第一关键字降序排序,第一关键字相同的情况下按照第二关键字降序排序。
在C++中,我们可以使用std::sort
函数来对一组数据进行排序。该函数需要传入一个指向容器起始位置的迭代器和指向容器结束位置的迭代器,以及一个比较函数。比较函数用于定义两个元素之间的“小于”关系,以便进行排序。
在本例中,我们需要按照第一关键字和第二关键字的大小关系来定义“小于”关系。可以通过函数对象或Lambda表达式来实现比较函数。
以下是使用函数对象实现比较函数的示例代码:
struct cmp {
bool operator()(const std::pair<int, int>& lhs, const std::pair<int, int>& rhs) const {
if (lhs.first == rhs.first) {
return lhs.second > rhs.second;
}
return lhs.first > rhs.first;
}
};
std::vector<std::pair<int, int>> vec = {{1, 2}, {3, 4}, {1, 0}, {2, 0}};
std::sort(vec.begin(), vec.end(), cmp());
以上代码定义了一个名为cmp
的函数对象,重载了()
运算符,并在其中实现了比较函数。在比较函数中,首先比较第一关键字的大小,如果相同则比较第二关键字的大小。最后将比较结果返回即可。
在主函数中,我们定义了一个包含多个对对的vector
,并使用std::sort
对其进行排序。需要注意的是,在调用std::sort
函数时,需要传入一个名为cmp()
的cmp
对象,定义了我们实现的比较函数。
和函数对象相比,使用Lambda表达式来实现比较函数更加简便。以下是使用Lambda表达式实现比较函数的示例代码:
std::vector<std::pair<int, int>> vec = {{1, 2}, {3, 4}, {1, 0}, {2, 0}};
std::sort(vec.begin(), vec.end(), [](const std::pair<int, int>& lhs, const std::pair<int, int>& rhs) {
if (lhs.first == rhs.first) {
return lhs.second > rhs.second;
}
return lhs.first > rhs.first;
});
在以上代码中,我们定义了一个Lambda表达式,在其中实现了和函数对象相同的比较函数。在主函数中,我们将其作为第三个参数传入std::sort
函数即可。
运行以上代码后,我们得到的vec
容器中的元素顺序为:
3 4
2 0
1 2
1 0
按照第一关键字降序排列,相同的情况下按照第二关键字降序排列。可以看到,我们成功地对对进行了排序,得到了符合预期的结果。
在C++中,使用std::sort
函数可以对vector
等容器进行排序。为了实现按照第一关键字降序排列,相同的情况下按照第二关键字降序排列的效果,我们需要自定义比较函数并传入std::sort
函数。比较函数可以使用函数对象或Lambda表达式来实现。在实现比较函数时,需要考虑到两个元素的第一关键字和第二关键字的大小关系。