【问题标题】:Why does my object not get inserted into std::set?为什么我的对象没有插入到 std::set 中?
【发布时间】:2017-02-17 07:48:25
【问题描述】:

我有以下结构用于比较 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 中对象数量的增加......但是第二个我不能。

我犯了什么错误?

编辑:我怀疑这是因为我的比较器功能有误。我以前从来没有为一个系列写过一个,所以我想这可能是一个根本的误解......

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    我只是假设rect1.size.width == rect2.size.width,这使得比较器在这两种情况下都返回false,在这种情况下,对象不会被插入到集合中,因为集合不允许重复。要么改变你的矩形,要么做一个更详细的比较器。

    【讨论】:

    • 是的,这就是问题所在。你是对的。我可以在 7 分钟内接受你的回答..
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多