我试图用以下类型对2D向量进行排序:
vector<pair<char, double>> output;我试图把它们从最高到最低的双倍值排列,只显示前5位。这就是我要做的:
sort(output.begin(), output.end());但这种情况对我来说不太合适。我做错了什么?
发布于 2013-10-08 19:39:35
默认情况下,std::sort将对容器的元素使用小于比较运算符,该运算符将首先使用char,然后使用double执行am字典比较。
您可以使用您自己的排序函数/函子,它只基于对的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);见这里的工作演示。
发布于 2013-10-08 19:41:41
正如Violet所说,您可能希望包含自己的比较功能:
类比较{ public: bool运算符() (std::pair const& p1,std::pair const& p2) const { //执行逻辑}
std::sort使用operator <对元素进行比较,并对它们进行相应的排序。它为比较函子提供了一个额外的可选参数,我们可以如下所示:
(output.begin(),output.end(),谓词);
注意,这也可以使用C++11中的lambda来完成。
发布于 2013-10-08 19:39:02
您需要在pair<char, double>操作数之间编写一个比较运算符。http://en.cppreference.com/w/cpp/algorithm/sort
https://stackoverflow.com/questions/19256754
复制相似问题