2016-10-31 2 views
-1

Ich habe folgende Struktur,C++ upper_bound auf struct Vektor mit Operator ==

struct cube 
{ 
    int index l , b , h; 
    bool operator<(const cube & c2) const 
    { 
     if (l == c2.l && b == c2.b && h == c2.h) 
      return index < c2.index; 
     if (l == c2.l && b == c2.b) 
      return h < c2.h; 
     if (l == c2.l) 
      return b < c2.b; 
     return l < c2.l; 
    } 
    bool operator==(const cube c2) 
    { 
     return index != c2.index && l == c2.l && b == c2.b; 
    } 
}; 

Jetzt möchte ich auf Vektor dieser Struktur anzuwenden upper_bound gemäß Bedingung Operator ==.
Allerdings ist es immer noch mir diese Iteratoren zurückkehrt, wo Index gleich sind

int pos2 = upper_bound(v.begin(),v.end(),v[i]) - v.begin(); 

dh v [i] .index gleich v [pos2] .index

+0

'uppoer_bound' beiseite' index! = C2.index' - bedeutet das, dass Strukturen gleich sind, wenn ihre Indizes unterschiedlich sind? – krzaq

+0

Nein, ich benutze nur '==' für obere_Befehl, es gibt keine andere Verwendung von '== Operator in meinem Code –

+2

Aber' Obere_Beitrag 'verwendet' Operator <', nicht' == '... – krzaq

Antwort

0

Es ist möglich, dass für zwei cube Instanzen foo und bar dass foo < bartrue ist, wenn foo == bar auch true ist. Sie könnten das beheben, indem Sie index == c2.index && l == c2.l && b == c2.b als zurückgegebenen Ausdruck in operator== schreiben.

Dieser Widerspruch ist die Ursache für Ihre Probleme. Beachten Sie jedoch, dass std::upper_bound nur erfordert, dass operator< entsprechend implementiert wird; was deiner ist.

Ist das nicht index eher eine Eigenschaft einer Sammlung von cube s eher als ein gegebenen cube? Das heißt, es sollte nicht in der cube Klasse erscheinen?

+0

ja, der Index ist für die Sammlung von Cubes gleich –

+0

Index ist gleich für 6 Würfel und alle 6 Würfel sind im Vektor vorhanden –