我定义了一个类,然后priority_queue中存放类并且使用自己定义的比较函数,但是如果比较函数传递的是函数指针就会发生崩溃:
class Foo
{
friend bool cmp(Foo *, Foo *);
public:
Foo() = default;
Foo(int x):val(x) {}
private:
int val;
};
bool cmp(Foo *a, Foo *b)
{
return a->val < b->val;
}
int main()
{
priority_queue<Foo*, vector<Foo*>, decltype(cmp)*> que;
que.push(new Foo(5));
que.push(new Foo(6));
return 0;
}
如果改为函数对象则正常:
class Foo
{
friend struct cmp;
public:
Foo() = default;
Foo(int x):val(x) {}
private:
int val;
};
struct cmp
{
bool operator()(Foo *a, Foo *b)
{
return a->val < b->val;
}
};
int main()
{
priority_queue<Foo*, vector<Foo*>, cmp> que;
que.push(new Foo(5));
que.push(new Foo(6));
return 0;
}
请问这是为什么??
해결되었습니다. 여러분 감사합니다. 함수 포인터를 전달할 때 초기화가 없기 때문입니다.> ;, decltype(cmp)* >que(cmp);
은 다음과 같이 작성해야 합니다.
priority_queue, vector
함수 포인터는 기본적으로 포인터를 생성할 수 없기 때문에 생성자의 매개변수에 함수 이름을 전달해야 한다고 생각합니다. 그리고
struct cmp
에는 자동으로 생성될 수 있는 기본 생성자가 있으므로 다시 전달할 필요가 없습니다.템플릿, > 클래스 우선순위_큐;
클래스 비교 = less
비교 - 엄격한 약한 순서를 제공하는 비교 유형입니다.
cmp要为一个class,而且不是class *。