如何对向量中的元素对进行排序?

How to sort elements of pairs inside vector?

我在一个向量中有一对int和string,如何先根据int对它们进行排序,如果int值重复则根据字符串的字典顺序排序。

vector< pair<int, string> > v;

你只是:

std::sort(v.begin(), v.end());

std::pair按字典顺序比较。

另一方面,如果您想根据 std::pair 的第二个元素对它们进行排序,则必须按以下方式定义自定义比较器:

std::sort(v.begin(), v.end(), [](std::pair<int, std::string> const &p1,
                                 std::pair<int, std::string> const &p2) { 
                                   return (p1.second == p2.second)?
                                             p1.first < p2.first  :
                                             p1.second < p2.second;
                              });

我所做的是存储 int 值乘以 -1,然后按升序排序,然后再次乘以 -1 到存储的 int 值以恢复 int 值。这样做使成对的向量按需要排列。