【问题标题】:In c++, what is the fastest way to sort in reverse order?在c ++中,以相反顺序排序的最快方法是什么?
【发布时间】:2019-09-07 12:56:13
【问题描述】:

是以下之一还是其​​他?

//1
sort(first,last,[](const T &a,const T &b){return comp(b,a);});
//2
sort(first,last,bind(comp,ref(_2),ref(_1));
//3
sort(make_reverse_iterator(last),make_reverse_iterator(first),comp);
//Use value instead of reference if object size is small.

这不是Sorting a vector in descending order的重复,这个考虑用户定义的比较函数。

【问题讨论】:

标签: c++


【解决方案1】:

没有比简单地反转比较器更简单的方法了。如果您的比较器在比较 AB 时返回 true,则改为返回 false,反之亦然。

确保注意AB 相等的情况;在这种情况下,您希望比较器仍然返回 false

顺便说一句,它不会变得更快。

【讨论】:

  • 什么会更快,lambda 或 bind?
  • @user 我想说没关系,但您可能应该做一个基准测试来测试该理论。 IMO,尽可能使用 lambda(并注意那些范围!)
  • @smac89 std::sort 的比较函数对象返回 bool。返回 -1 而不是 1 将不起作用。
  • @Blastfurnace 啊,是的,谢谢。我写的时候在想java
  • 事实证明 lambda 明显更快
【解决方案2】:

使用 lambda 的基准测试显示速度比其他两个快得多。

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 2011-02-19
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多