对矢量c ++进行排序

时间:2013-10-08 19:37:29

标签: c++ sorting vector 2d

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

vector<pair<char, double>> output;

我正在尝试将它们从最高到最低的双倍值排列,只显示前5位。这就是我要做的事情:

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

但这种方式对我来说不合适。我做错了什么?

4 个答案:

答案 0 :(得分:2)

默认情况下,std::sort将对容器的元素使用小于比较运算符,这将首先使用char然后使用double执行字典比较。< / p>

您可以使用自己的订购功能/仿函数,仅根据货币对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);

请参阅working demo here

答案 1 :(得分: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来完成。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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