L'errore che ti viene segnalato è un check per vedere se il tuo operatore definisce effettivamente uno strict weak order; nello specifico, il test fallito è che se (a < b) è vero, allora (b < a) deve essere falso.
Secondo me dovresti rendere più rigorosa la scrittura di quell'operatore, in modo da evitare corner case strani: tu in sostanza vuoi ordinare usando come criteri:
1. la superficie dell'immagine
2. l'altezza dell'immagine
3. la larghezza dell'immagine
(dove si passa al criterio successivo se la proprietà del corrente risulta uguale)
Per fare questo io farei una cosa del tipo:
Uso le tuple perché hanno uno strict weak ordering già fatto e sicuramente funzionante.codice:struct Texture2DGreater { bool operator()(Texture2D const *s1, Texture2D const *s2) const { std::tuple<int, int, int> t1(s1->GetHeight()* s1->GetWidth(), s1->GetHeight(), s1->GetWidth()); std::tuple<int, int, int> t2(s2->GetHeight()* s2->GetWidth(), s2->GetHeight(), s2->GetWidth()); return t1<t2; } };
(tra parentesi, perché, pur essendo C++, usi le struct con il typedef?)

)
Rispondi quotando