首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向量c++排序

向量c++排序
EN

Stack Overflow用户
提问于 2013-10-08 19:37:28
回答 4查看 8.6K关注 0票数 1

我试图用以下类型对2D向量进行排序:

代码语言:javascript
复制
vector<pair<char, double>> output;

我试图把它们从最高到最低的双倍值排列,只显示前5位。这就是我要做的:

代码语言:javascript
复制
sort(output.begin(), output.end());

但这种情况对我来说不太合适。我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-08 19:39:35

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

您可以使用您自己的排序函数/函子,它只基于对的double元素进行排序:

代码语言:javascript
复制
bool cmp(const std::pair<char, double>& lhs, 
         const std::pair<char, double>& rhs)
{
  return lhs.second > rhs.second;
}

然后

代码语言:javascript
复制
std::vector<std::pair<char, double>> output = ....;
sort(output.begin(), output.end(), cmp);

这里的工作演示

票数 3
EN

Stack Overflow用户

发布于 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来完成。

票数 2
EN

Stack Overflow用户

发布于 2013-10-08 19:39:02

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19256754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档