【发布时间】:2016-04-14 12:10:45
【问题描述】:
我在一个向量中有一对int和string,如何首先根据int对它们进行排序,如果int值重复则根据string的字典顺序排序。
vector< pair<int, string> > v;
【问题讨论】:
-
std::sort。不需要其他任何东西。
我在一个向量中有一对int和string,如何首先根据int对它们进行排序,如果int值重复则根据string的字典顺序排序。
vector< pair<int, string> > v;
【问题讨论】:
std::sort。不需要其他任何东西。
你只是:
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;
});
【讨论】:
std::vector<std::pair<std::string, int>> 而不是 OP 所说的std::vector<std::pair<int, std::string>>。
我所做的是存储 int 值乘以 -1,然后按升序对其进行排序,然后再次乘以 -1 到存储的 int 值以恢复 int 值。这样做可以根据需要排列成对的向量。
【讨论】: