1

我正在尝试使用以下类型对 2D 向量进行排序:

vector<pair<char, double>> output;

我正在尝试将它们从最高到最低的双精度值排列,并且只显示前 5 个。这就是我想要做的:

sort(output.begin(), output.end());

但是这种方法对我来说不能正常工作。我究竟做错了什么?

4

4 回答 4

3

默认情况下,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);

在此处查看工作演示

于 2013-10-08T19:39:35.430 回答
2

正如 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 来完成。

于 2013-10-08T19:41:41.370 回答
0

您使用成对向量是否有原因?换句话说,元素在内部存储的顺序对你来说真的很重要吗?如果没有,您最好使用map<double,char>带有反向迭代器的 a 来获取按双精度值排序的最后 5 个元素。

于 2013-10-08T19:43:29.210 回答
0

您需要在操作数之间编写一个比较运算符pair<char, double>http://en.cppreference.com/w/cpp/algorithm/sort

于 2013-10-08T19:39:02.263 回答