gpt4 book ai didi

c++ - priority_queue emplace 给出段错误

转载 作者:行者123 更新时间:2023-11-28 02:10:54 25 4
gpt4 key购买 nike

下面的代码给出了段错误,有人能赐教吗?我想要实现的是让优先级队列按 tv.t 的升序或 tv.m 的降序排序。

struct tv {
int m;
int c;
int t;
tv(int mm, int cc, int tt): m(mm), c(cc), t(tt) {}
};


bool comp(struct tv & t1 , struct tv & t2) {
if (t1.t == t2.t) {
return t1.m < t2.m;
}
return t1.t > t2.t;
}


int main(int argc, char** argv) {
priority_queue<struct tv, vector<struct tv>, decltype(&comp)> q;
q.emplace(0, 0, 0);
q.emplace(1, 0, 0);
q.emplace(1, 1, 1);
q.emplace(1, 2, 0);
return 0;
}

最佳答案

您在模板参数列表中为您的优先级队列提供了一个比较器类型,但您没有在构造函数中为它提供一个实际的比较器。

priority_queue<tv, vector<tv>, decltype(&comp)> q(comp);

如您所见,它正在调用一个空函数指针。这是使用函数对象而不是函数指针的一件好事。它们可以是默认构造的并做正确的事情。

struct comp_t {
bool operator()(const tv & t1 , const tv & t2) const {
if (t1.t == t2.t) {
return t1.m < t2.m;
}
return t1.t > t2.t;
}
};

priority_queue<tv, vector<tv>, comp_t> q;

关于c++ - priority_queue emplace 给出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35714636/

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