2010-09-20 40 views
2
struct SimGenRequest { 

    int wakeup_mfm_; 
    double value_; 

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

}; 

用途:调用std :: stable_sort时出错?

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); 

不起作用。 任何指针?

+6

“不起作用”是什么意思?不,这个代码中没有指针(尽管迭代器可能是指针的typedef)。 – 2010-09-20 14:25:18

+0

第二个变体编译为我,假设需要include和std :: set all_requests_; – 2010-09-20 14:30:38

+1

@Steve Townsend:我怀疑它是用'std :: set'编译的 - 你的意思是'std :: vector'? (在集合上调用'std :: stable_sort'毫无意义,实际上它不会被编译!)否则,它也会为我编译。 – Thanatos 2010-12-05 20:38:58

回答

-1

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

+1

这不是OP想要做什么? – Thanatos 2010-12-05 20:32:50

0

以下是或多或少的代码。它编译并产生预期的输出。为了进一步帮助您,我们需要更多的信息来了解哪些行不通。

#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; 
}