Почему мой объект не вставляется в std :: set?

У меня есть следующая структура для сравнения объекта Rect ..

struct rectcomp {
bool operator() (const Rect& lhs, const Rect& rhs) const{
return lhs.size.width<rhs.size.width;
}
};

У меня есть следующий набор, где я хочу хранить свои Rect’s

std::set<Rect,rectcomp> _availableRects;

Я вставляю это со следующим кодом;

void insertPairOfRects(const Rect rect1,const Rect rect2){
_availableRects.insert(rect1); //first line
_availableRects.insert(rect2); //second line
}

Проблема в том, что rect1 всегда вставляется, а rect2 нет. Когда я шагаю по отладчику, после первой строки функции insertPairOfRects я ясно вижу увеличение количества объектов в insertPairOfRects …. но для второй я не могу.

Какую ошибку я делаю?

РЕДАКТИРОВАТЬ: я подозреваю, что это из-за ошибки в моей функции компаратора. Я никогда не писал ни одного ранее для съемок, поэтому я думаю, что это, вероятно, фундаментальное недоразумение здесь …

0

Решение

Я просто собираюсь предположить, что rect1.size.width == rect2.size.width, это заставляет компаратор возвращать false в обоих случаях, когда объект не вставляется в набор, потому что набор не допускает дублирования. Либо поменяйте прямоугольники, либо сделайте более детальный компаратор.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector