2013-05-18 22 views
5

的載體時,我有class Passanger有變量string name; string station; string ticket; ,然後我有另一個和這個類中我有vector<Passanger*> myQueue;使用stable_sort,分選物體

現在我想用stable_sort排序myQueue。有沒有什麼可能,怎麼說到stable_sort,應該是什麼關鍵,按照它要排序myQueue

std::stable_sort(myQueue.begin(),myQueue.end(), maybeSomethingElse());

回答

7

是的,你需要一個比較器類。他們看起來像這樣。

class CompareFoo { 
    public: 
    bool operator() (const Foo* e1, const Foo* s2) 
    { 
     return e1->name < e2->name; // strict weak ordering required 
    } 
}; 

然後將它的一個實例作爲參數傳遞給stable_sort

std::stable_sort(myQueue.begin(), myQueue.end(), CompareFoo()); 
+1

函數在這種情況下將以相同的方式代替函數對象。 –

1

你可以通過指定你自己的比較函數來做到這一點。

一些有用的參考文獻:

10

有一個允許自定義比較器作爲std::stable_sort()過載其第三個論據。你可以在那裏提供一個比較函數,一個函數或lambda(在C++ 11中)。舉例來說,使用拉姆達:

std::stable_sort(myQueue.begin(),myQueue.end(), [] (Passenger* p1, Passenger* p2) 
{ 
    return p1->age() < p2->age(); // Or whatever first your needs... 
}); 
3

定義使用例如拉姆達比較器(與std::tie如果排序是依賴於Passanger多個屬性):

std::stable_sort(myQueue.begin(), 
       myQueue.end(), 
       [](Passanger* p1, Passanger* p2) 
       { 
        return std::tie(p1->name(), p1->station()) < 
          std::tie(p2->name(), p2->station()); 
       }); 

如果C++ 11不可限定比較器並在其他地方使用boost::tie