Сортировка вектора структуры приводит к тому, что Visual Studio выдает всплывающее окно с сообщением «Ошибка отладки» - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть простая структура Rectangle с x, y, width и height, которая, как я думал, будет легко работать с векторами, но она оказалась довольно грязной.

Это то, что у меня есть вmain:

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

Я объявил это в своем заголовке

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

с таким определением:

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 выдает мне это сообщение об ошибкеenter image description here.

Я потратил весь день на поиски в Google, чтобы увидеть, что я сделал неправильно, но не могу найти причину.Пожалуйста, помогите.

1 Ответ

4 голосов
/ 24 апреля 2011

Ваш компаратор неверен.Компаратору необходимо вернуть bool: true, если a «меньше» b и false в противном случае.Необходимо обеспечить строгий слабый порядок .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...