有什么方法可以在 C++ 中通过更大的 int 和更小的对来对 int 对和 pair 的集合进行排序?
Is there any way to sort set of pair of int and pair by greater int and smaller pair in c++?
我有一个 set<int, pair<int, int> > ms
,我想按更大的 int
和更小的 pair<int, int>
对它进行排序。例如,如果这些是我的集合中的数据:
<10, pair<100, 120> >
<20, pair<45, 60> >
<20, pair<50, 10> >
我希望排序后是这样的:
<20, pair<45, 60> >
<20, pair<50, 10>
<10, pair<100, 120> >
我知道我可以按 std::greater 降序插入集合,但我不知道如何组合降序和升序!
将自定义比较运算符传递给 std::sort
。
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
int main() {
std::vector<std::pair<int, std::pair<int, int>>> v = {
std::make_pair(10, std::make_pair(100, 120)),
std::make_pair(20, std::make_pair(45, 60)),
std::make_pair(20, std::make_pair(50, 10)),
};
std::sort(v.begin(), v.end(), [](const auto &lhs, const auto &rhs) -> bool {
if (std::get<0>(lhs) > std::get<0>(rhs))
return true;
else if (std::get<0>(lhs) < std::get<0>(rhs))
return false;
else
return std::get<1>(lhs) < std::get<1>(rhs);
});
for (const auto &e : v) {
std::cout << e.first << " " << e.second.first << " " << e.second.second;
std::cout << "\n";
}
}
我有一个 set<int, pair<int, int> > ms
,我想按更大的 int
和更小的 pair<int, int>
对它进行排序。例如,如果这些是我的集合中的数据:
<10, pair<100, 120> >
<20, pair<45, 60> >
<20, pair<50, 10> >
我希望排序后是这样的:
<20, pair<45, 60> >
<20, pair<50, 10>
<10, pair<100, 120> >
我知道我可以按 std::greater 降序插入集合,但我不知道如何组合降序和升序!
将自定义比较运算符传递给 std::sort
。
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
int main() {
std::vector<std::pair<int, std::pair<int, int>>> v = {
std::make_pair(10, std::make_pair(100, 120)),
std::make_pair(20, std::make_pair(45, 60)),
std::make_pair(20, std::make_pair(50, 10)),
};
std::sort(v.begin(), v.end(), [](const auto &lhs, const auto &rhs) -> bool {
if (std::get<0>(lhs) > std::get<0>(rhs))
return true;
else if (std::get<0>(lhs) < std::get<0>(rhs))
return false;
else
return std::get<1>(lhs) < std::get<1>(rhs);
});
for (const auto &e : v) {
std::cout << e.first << " " << e.second.first << " " << e.second.second;
std::cout << "\n";
}
}