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
5
A
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
- 1. Membri dati classe base virtuale
- 2. ordinamento membri dell'array di strutture
- 3. Ordinamento di un array di oggetti Objective-C
- 4. Dati principali, ordinamento di oggetti figlio uno-a-molti
- 5. Ordinamento: Ordinamento array di base a più condizioni in Ruby
- 6. C++: inizializzazione Ordine di Classe Membri dati
- 7. Ordinamento di un elenco di oggetti in C#
- 8. Ordinamento su molti rapporti Imposta nei dati di base
- 9. Objective C costruzione di oggetti a due fasi
- 10. Come ordinare i risultati dei dati di base in base a un attributo della raccolta di oggetti correlati?
- 11. C++ 11; Le inizializzazioni di membri di dati non statici possono accedere ad altri membri dati?
- 12. ordinare un array in base a membri di un altro array in C++
- 13. C++ Ordinamento di oggetti personalizzati in un elenco
- 14. Passaggio di dati tra oggetti in C#
- 15. Accesso membri di un tipo di dati personalizzati a Haskell
- 16. Ordinamento di un array di stringhe in base a una posizione di stringa (C#)
- 17. Ordinamento di una collezione di oggetti
- 18. Ordinamento di più array in base a un altro ordinamento per array
- 19. Ordinamento alfabetico di elenchi di oggetti
- 20. Mappaggio di oggetti complessi di restkit, con matrici di oggetti nidificati, in Dati di base
- 21. T-SQL - ottenere dati in base a due colonne
- 22. elenchi di ordinamento in base ad alcuni elementi
- 23. Ordinamento di una matrice di oggetti SimpleXML
- 24. Ordinamento di un array elenco di oggetti sulla base di una variabile in oggetto
- 25. Scrittura di membri di oggetti su pacchi
- 26. ordinamento arraylist di oggetti complessi alfabeticamente
- 27. In classe inizializzazione di membri dati statici
- 28. Come posso ordinare gli oggetti restituiti da EF in base a un elenco di ID?
- 29. Tabella di ordinamento C# di 2 colonne
- 30. Ordinamento una tabella di dati
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. –
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