为什么我的对象没有插入到std :: set中?

时间:2016-10-08 11:53:41

标签: c++ c++11

我有以下结构用于比较Rect对象..

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

我有以下设置,我希望存储我的Rect

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中对象数量的增加....但是对于第二行我不能。

我犯了什么错误?

编辑:我怀疑是因为我的比较器功能出错了。我之前从未写过一套,所以我想这可能是一个根本的误解......

1 个答案:

答案 0 :(得分:1)

我只是假设rect1.size.width == rect2.size.width,这使得比较器在两种情况下都返回false,在这种情况下,对象不会被插入到集合中,因为集合没有&#39; t允许重复。更改矩形或制作更详细的比较器。