2011-04-24 2 views
0

J'ai une structure Rectangle simple avec x, y, largeur et hauteur, que je pensais être facile à travailler avec des vecteurs, mais il a tourné dehors pour être assez malpropre.Trier un vecteur de struct provoque Visual Studio à lancer un popup avec "Échec de l'assertion de débogage"

C'est ce que j'ai dans le principal:

vector<CvRect> v; 
v.push_back(cvRect(50,0,50, 50)); 
v.push_back(cvRect(150, 0, 50,50)); 
v.push_back(cvRect(100, 0, 50,50)); 
sort(v.begin(), v.end(), rectangleCmpByPosition); 

Je cette déclaration dans ma tête

static int rectangleCmpByPosition(const CvRect &a, const CvRect &b); 

avec ce que la définition:

static int rectangleCmpByPosition(const CvRect& a, const CvRect &b){ 
    if (a.y != b.y){ 
     return a.y - b.y; 
    }else{ 
     return a.x - b.x; 
    } 
} 
studio

et visuel jette cette message d'erreur chez moi enter image description here.

J'ai passé toute l'après-midi à googler pour voir ce que j'ai fait de mal mais je ne peux pas trouver la cause. S'il vous plaît aider.

Répondre

4

Votre comparateur est incorrect. Le comparateur doit renvoyer un bool: true si a est "inférieur à" b et false sinon. Il doit fournir un strict weak ordering.

+0

Merci pour l'aide. Je savais que c'était quelque chose de stupide comme ça. – Haoest

Questions connexes