比较函数必须遵循严格弱排序。
例如,如果我是sort函数,则给您两个armour_set指针,问您“哪个先出现?”。然后您返回一个真/假值,表示哪个值在前。然后,我给您两个相同的armour_set指针,但是这次更改项目的顺序。我问你同样的问题“哪个先到?”。然后,您返回相同的true
/ false值。猜猜-您输了。
简而言之,这违反了严格的弱排序。没有办法
a < b,而且同时
b < a。看一下您比较复杂的比较功能,我猜您是在违反此规则。
如果您使用的是Visual
Studio,则调试运行时将对此类排序违规进行准确的检查。比较函数被调用两次,第一次以A,B顺序,第二次以B,A顺序。比较每个调用的返回值,如果存在冲突,则将发生assert()。



