【发布时间】:2017-08-14 23:44:58
【问题描述】:
在 C++ 中有什么方法,可以根据对值的差异对我进行排序。例如,假设我有 4 对
1 3,
5 6,
2 3,
12 5,
所以,对的差异是 2 1 1 7,如果我按降序排序 排序后的向量将是,
12 5,
1 3,
5 6,
2 3,
我希望你明白我的问题是什么。有没有办法以这种方式对元素进行排序?
我尝试过这种方式来根据第一个或第二个元素对元素进行排序。但这不是我的问题。我的问题是我需要根据差异进行排序。
bool sortinrev(const pair<int,int> &a, const pair<int,int> &b){
return(a.first > b.first) ;
}
int main()
{
vector< pair <int,int> > pq;
for(int i=1; i<=4; i++){
int x,y;
cin >> x >> y;
pq.push_back(make_pair(x,y));
}
sort(pq.begin(), pq.end(), sortinrev);
for(int i=0; i<4; i++){
cout << pq[i].first << " " << pq[i].second << endl;
}
return 0;
}
【问题讨论】:
-
sort function c++ 可以将函数指针作为参数。只需向它传递一个按您想要的方式比较配对的函数。
-
我只知道如何根据第一个元素或第二个元素进行排序。由于我不知道如何根据差异进行排序,所以我发布了知道方法。然后我会尝试解决我真正的问题。
-
您可以将
compare变量传递给sort()方法。请参阅@scohe001 在他的评论中的链接。 -
实际上有很多方法,因为这是计算问题,而 C++ 强大到足以实现几乎任何东西(尽管有时需要时间)。在这种特殊情况下,C++ 提供了对相当简短和优雅的解决方案
std::sort的内置支持(并使用比较器变体,如 CoryKramer 的答案所示)。但是问题“C++ 中有什么方法吗?” 通常会自动回答“是”,除非你有一些非计算问题,或者一些非常低级的操作系统/固件。 -
@YeasinRahaman “最好”的方式是什么?短源?短二进制?最棒的表演?等等......在这种情况下你不能拥有所有这些,下面的答案是合理的妥协(简单的源,以预期的方式重新使用 C++ stdlib,合理的性能)。