C++ C++;设置比较器

C++ C++;设置比较器,c++,set,comparator,stdset,C++,Set,Comparator,Stdset,代码如下: struct comp { bool operator()(Reputation *one, Reputation *two) { if (one->Amount < 0 && two->Amount >= 0) return false; if (one->Amount >= 0 && two->Amount < 0)

代码如下:

struct comp
{
    bool operator()(Reputation *one, Reputation *two)
    {
        if (one->Amount < 0 && two->Amount >= 0)
            return false;
        if (one->Amount >= 0 && two->Amount < 0)
            return true;

        if (one->Amount >= 0)
            return one->Amount <= two->Amount;
        else
            return one->Amount >= two->Amount;
    }
};
struct comp
{
布尔运算符()(声誉*1,声誉*2)
{
如果(一->金额<0&&2->金额>=0)
返回false;
如果(一->金额>=0&&2->金额<0)
返回true;
如果(一->金额>=0)
返回一个->金额;
其他的
返回一->金额>=二->金额;
}
};
这就是问题所在:

调试断言失败
文件:..\VC\include\xtree
电话:638

表达式:无效运算符

金额==的信誉插入到先前插入的信誉*之一时,问题似乎出现了,但我不确定最后一个信誉

任何帮助都将不胜感激


编辑:我希望它们的顺序是先按asc顺序排列正的,然后按desc顺序排列负的。示例:1 5 10 11 11 20 50-1-5-50标准::集合中的项目必须是唯一的!(比较少)如果您希望有多个具有相同值的项目(如您提供的示例),请使用
std::multiset


请参阅:和

您不能将相同的值插入std::set,它需要唯一的值。使用std::multiset

对于您有趣的订购,这似乎有效:

struct comp
{
    bool operator()(const Reputation *a, const Reputation *b)
    {
        if (a->Amount < 0 && b->Amount < 0)
            return a->Amount > b->Amount;
        else if (a->Amount < 0) return false;
        else if (b->Amount < 0) return true;
        else return a->Amount < b->Amount;
    }
};
struct comp
{
布尔运算符()(常数声誉*a,常数声誉*b)
{
如果(a->金额<0&&b->金额<0)
返回a->Amount>b->Amount;
否则如果(a->Amount<0)返回false;
否则如果(b->Amount<0)返回true;
否则返回a->AmountAmount;
}
};

您必须定义一个不可伸缩的关系,就像
我将其转换为std::multiset一样,但同样的问题也会出现。该集合是一组指针。它们都是独一无二的,即使有些数量相同。这是准确的代码:多集排序;对于已排序的(Reputation*rep=Reputation::GetReputationTable();rep->Id;++rep)。插入(rep);哦,好吧,这个例子不清楚。。。但是如果你存储指针,使用指针,谢谢,这就解决了问题。非常感谢!很高兴我帮助解决了“调试断言失败”的问题,但是请阅读我关于“唯一性”的最新编辑——如果您想保留比较器无法区分的多个项目,您确实需要一个多集,如@Kasprzol所说。是的,我已经按照Kasprozl的建议将其转换为多集了!你能帮我解决类似的问题吗?即使set comparator出现相同的“调试断言失败!”错误,我也无法解决此问题?我的问题链接在这里:[链接]