2011-04-24 1 views
0

x, y, 너비 및 높이가있는 간단한 Rectangle 구조체가 있습니다. 밖으로 꽤 어질러지기.구조체의 벡터를 정렬하면 Visual Studio에서 "디버그 어설 션 오류"와 함께 팝업을 발생시킵니다.

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; 
    } 
} 

및 Visual Studio이를 던졌습니다 :이 정의로이 내 헤더

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

에서 선언 한

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); 

:

내가 주에있는 것입니다 나에게 오류 메시지가 enter image description here.

내가 뭘 잘못했는지 알아보기 위해 인터넷 검색을 사용했지만 원인을 찾을 수 없습니다. 도와주세요.

답변

4

비교기가 잘못되었습니다. 비교기는 a이 "미만"b이고 그렇지 않은 경우 false이면 bool : true을 반환해야합니다. strict weak ordering을 제공해야합니다.

+0

도움 주셔서 감사합니다. 나는 그게 어리석은 짓이라는 것을 알았습니다. – Haoest