我正在尝试使用以下类型对 2D 向量进行排序:
vector<pair<char, double>> output;
我正在尝试将它们从最高到最低的双精度值排列,并且只显示前 5 个。这就是我想要做的:
sort(output.begin(), output.end());
但是这种方法对我来说不能正常工作。我究竟做错了什么?
默认情况下,std::sort
将对容器的元素使用小于比较运算符,这将使用第char
一个然后是double
.
您可以使用自己的排序函数/函子,double
仅基于对的元素进行排序:
bool cmp(const std::pair<char, double>& lhs,
const std::pair<char, double>& rhs)
{
return lhs.second > rhs.second;
}
然后
std::vector<std::pair<char, double>> output = ....;
sort(output.begin(), output.end(), cmp);
在此处查看工作演示。
正如 Violet 所说,您可能希望包含自己的比较函数:
class compare { public: bool operator() (std::pair<char, int> const& p1, std::pair<char, int> const& p2) const { // perform logic here } } Predicate;
std::sort
用于operator <
比较元素,并相应地对它们进行排序。它有一个用于比较函子的额外可选参数,我们可以像这样包含它:
std::sort(output.begin(), output.end(), Predicate);
请注意,这也可以使用 C++11 中的 lambda 来完成。
您使用成对向量是否有原因?换句话说,元素在内部存储的顺序对你来说真的很重要吗?如果没有,您最好使用map<double,char>
带有反向迭代器的 a 来获取按双精度值排序的最后 5 个元素。
您需要在操作数之间编写一个比较运算符pair<char, double>
。
http://en.cppreference.com/w/cpp/algorithm/sort