gpt4 book ai didi

c++ - std::sort 在 std:vector of pointers 上失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:11 26 4
gpt4 key购买 nike

以下代码在对 vector 进行排序时崩溃。

#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;

struct Foo
{
int x;
// int y;
Foo() : x(0) {}
};

struct Cmp
{
bool operator() (Foo* p1, Foo *p2) const
{
if (p1->x != p2->x) return p1->x < p2->x;
// if (p1->y != p2->y) return p1->y < p2->y;
return true;
}
};

int main()
{
vector<Foo*> v;
for (int i=0; i<17; i++) // weird thing, doesn't crash if
// I put a number less than 17 !!!
{
Foo *ptr = new Foo();
if (ptr) v.push_back(ptr);
}
sort(v.begin(), v.end(), Cmp());

return 0;
}

为什么会这样?

最佳答案

bool operator() (Foo* p1, Foo *p2) const
{
if (p1->x != p2->x) return p1->x < p2->x;
return true;
}

std::sort需要一个创建 strict-weak ordering 的排序函数.这没有。这是 <= ,这不是严格弱排序。如果lhsrhs那么 comp(lhs, rhs) 是相等的和 comp(rhs, lhs)必须都返回 false

你的函数没有。因此,您会得到未定义的行为。

关于c++ - std::sort 在 std:vector of pointers 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com