【问题标题】:Mistake in calling std::stable_sort?调用 std::stable_sort 的错误?
【发布时间】:2010-09-20 14:21:31
【问题描述】:
struct SimGenRequest {

    int wakeup_mfm_;
    double value_;

    bool operator < ( const SimGenRequest & r2 ) const 
        { return ( wakeup_mfm_ < r2.wakeup_mfm_ ) ; }

};

使用:

std::stable_sort ( all_requests_.begin ( ), all_requests_.end ( ) );

作品(编译)。但是

struct SimGenRequest {

    int wakeup_mfm_;
    double value_;

};

bool CompareByWakeTime ( const SimGenRequest & r1, const SimGenRequest & r2 ) {
    return ( r1.wakeup_mfm_ < r2.wakeup_mfm_ ) ;
}

使用:

std::stable_sort ( all_requests_.begin ( ), all_requests_.end ( ), 
    CompareByWakeTime );

不起作用。 有什么指点吗?

【问题讨论】:

  • “不起作用”是什么意思?不,这段代码中没有指针(尽管迭代器可能是指针的 typedef)。
  • 假设需要包含和 std::set all_requests_;
  • @Steve Townsend:我怀疑它使用std::set 编译——你的意思是std::vector? (在 set 上调用 std::stable_sort 毫无意义,而且确实不会编译!)否则,它也会为我编译。

标签: c++ sorting stl


【解决方案1】:

以下或多或少是您的代码。它编译并产生预期的输出。为了进一步为您提供帮助,我们需要更多关于哪些问题的信息。

#include <algorithm>
#include <iostream>
#include <set>
#include <vector>

struct SimGenRequest {

    int wakeup_mfm_;
    double value_;

    SimGenRequest(int w, double v) :
        wakeup_mfm_(w),
        value_(v)
    { }
};

bool CompareByWakeTime ( const SimGenRequest & r1, const SimGenRequest & r2 ) {
    return ( r1.wakeup_mfm_ < r2.wakeup_mfm_ ) ;
}

int main()
{
    std::vector<SimGenRequest> all_requests_;

    all_requests_.push_back(SimGenRequest(3, 1));
    all_requests_.push_back(SimGenRequest(4, 3));
    all_requests_.push_back(SimGenRequest(3, 2));
    all_requests_.push_back(SimGenRequest(1, 4));

    std::stable_sort(all_requests_.begin(), all_requests_.end(), CompareByWakeTime);

    for(std::vector<SimGenRequest>::const_iterator i = all_requests_.begin();
        i != all_requests_.end();
        ++i)
    {
        std::cout << '(' << i->wakeup_mfm_ << ", " << i->value_ << ')' << std::endl;
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    STL 仅使用较少的运算符重载。否则,您可以为排序指定任何布尔函子,但您必须在 stable_sort 调用中输入它。

    【讨论】:

    • 这不是 OP 想要做的吗?
    猜你喜欢
    • 2020-09-14
    • 2014-07-22
    • 2013-01-10
    • 2010-10-23
    • 2012-04-04
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多