有什么方法可以在 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";
  }
}

https://repl.it/repls/ComfortableAfraidKernelmode