2010-09-20 5 views
2
struct SimGenRequest { 

    int wakeup_mfm_; 
    double value_; 

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

}; 

Utilisation:Erreur lors de l'appel de std :: stable_sort?

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

Works (compiles). Mais

struct SimGenRequest { 

    int wakeup_mfm_; 
    double value_; 

}; 

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

Utilisation:

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

ne fonctionne pas. Des pointeurs?

+6

Que signifie "ne fonctionne pas"? Et non, il n'y a pas de pointeurs dans ce code (bien que l'itérateur soit un typedef pour un pointeur). –

+0

La deuxième variante compile OK pour moi en supposant que includes inclut et std :: set all_requests_; –

+1

@Steve Townsend: Je doute qu'il compile en utilisant 'std :: set' - voulez-vous dire' std :: vector'? (Il ne sert à rien d'appeler 'std :: stable_sort' sur un ensemble, et en effet, il ne compilera pas!) Sinon, il compile aussi pour moi. – Thanatos

Répondre

-1

La technologie STL utilise moins de surcharge. Sinon, vous pouvez spécifier n'importe quel foncteur booléen pour le tri, mais vous devez l'entrer lors de l'appel stable_sort.

+1

Comment n'est-ce pas ce que le PO essaie de faire? – Thanatos

0

Ce qui suit est plus ou moins votre code. Il compile et produit la sortie attendue. Pour vous aider davantage, nous avons besoin de plus d'informations sur ce qui ne fonctionne pas.

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