这是我用vector存储的自定义类型,数据部分包括2个指针和1个数字.
class Diff
{
public:
Diff (Pic *p1,Pic *p2);
void cal_diff();
int get_diff_value()const;
bool usable() const;
public:
Pic * p1;
Pic * p2;
int diff_value;
bool operator < (const Diff & diff);
};
我实现了它的比较函数用来排序.
bool Diff::operator<(const Diff &diff)
{
if(this->usable() == false)
return false;
if(diff.usable() == false)
return true;
return this->get_diff_value() <= diff.get_diff_value();
}
但,我一用sort对存储它的vector数组进行排序就会崩溃,我debug了一下,发现.
比方说,这是崩溃时,operator<
函数里的变量的存储内容.
两个值的地址的后4位分别是4160,6128.
但,我再检查这个数组的占用空间就会发现.
这是数组开头,第1个成员的地址后4位是4160.
这是数组结尾,最后1个成员的地址后4位是6110.
...也就是说,崩溃时,sort在拿数组结尾之外的内存空间当作存在的对象来进行比较.
这是为什么?我的sort函数的调用很普通,不应该有这种情况啊?
std::sort(v_diff.begin(),v_diff.end());
sort 要求
a<a
返回false
。你这里在usable == true
的情况下会返回true
。