2013-09-30 5 views
5

Capisco che è possibile inserire una classe definita dall'utente in un std::vector e quindi sovraccaricare il meccanismo di ordinamento in modo che si confronti su un particolare membro dati. Tuttavia, come si ordina uno std::vector<MyClass> dove MyClass ha due membri dati e si desidera aggiungere un "secondo livello" di ordinamento sul secondo membro dati? Quindi ordinare il membro dati a e dove a è uguale, quindi ordinare sul membro dati b?C++ Ordinamento di oggetti in base a due membri di dati

+0

sovraccarico del meccanismo di raggruppamento consente di eseguire codice arbitrario su due oggetti raffrontati. Dovresti essere in grado di aggiungere tutti i "livelli" che desideri. –

+0

Proprio come lo faresti per un confronto su un singolo membro. Suggerisco di imparare come farlo prima (ci sono più domande su questo su SO), quindi semplicemente modificando il functor che hai scritto per confrontare sul secondo membro se il primo è uguale. – us2012

risposta

9

Creare un comparatore personalizzato utilizzando std::tuple

#include <tuple> 
    //..  
    struct comp 
    { 
     bool operator()(const MyClass& lhs, const MyClass& rhs) const 
     { 
     return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b); 
     } 
    }; 

Si utilizzerà a prima e poi b seconda

Problemi correlati