我正在尝试使用以下类型对2D矢量进行排序:
vector<pair<char, double>> output;
我正在尝试将它们从最高到最低的双倍值排列,只显示前5位。这就是我要做的事情:
sort(output.begin(), output.end());
但这种方式对我来说不合适。我做错了什么?
答案 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);
答案 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个按双值排序的元素。