gpt4 book ai didi

c++ - std::priority_queue 参数化比较结构

转载 作者:行者123 更新时间:2023-11-30 03:00:26 25 4
gpt4 key购买 nike

我第一次使用 std::priority_queue 进行大学作业。该分配是过程调度的模拟。我想将一个参数传递给我的比较结构构造函数进行初始化,我想我在另一个论坛上看到了它,但我无法再次找到源代码。我在发布之前查看了 SO,但没有看到任何类似的内容。

这是我的 priority_queue:

/* schedules.hpp / .cpp */
#include "process.hpp"

namespace my = procschedassignment;

int tick = 0;
std::priority_queue<my::Process, _
std::vector<my::Process>,
PrioritiseHighestResponseRatioNext(tick) > rq;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
line 100 - compiler errors are here
// ...

这是我的比较结构:

/* prioritise_process.hpp / .cpp */
#include "process.hpp"

namespace my = procschedassignment;

struct PrioritiseHighestResponseRatioNext {
public:
explicit PrioritiseHighestResponseRatioNext(int const& cpu_time)
: cpu_time_(cpu_time) {};
bool PrioritiseHighestResponseRatioNext::operator()(my::Process const& lhs,
my::Process const& rhs) {
bool ret;

if (lhs.wait_time() > cpu_time_) {
ret = (lhs.ResponseRatio() > rhs.ResponseRatio());
} else if (rhs.wait_time() > cpu_time_) {
ret = (lhs.ResponseRatio() < rhs.ResponseRatio());
}

return ret;
};

private:
const int cpu_time_;
};

我使用这段代码得到的编译器错误是:

../src/schedules.cpp:100: error: ‘time’ cannot appear in a constant-expression
../src/schedules.cpp:100: error: template argument 3 is invalid
../src/schedules.cpp:100: error: invalid type in declaration before ‘;’ token

是否可以使用 std::priority_queue 进行参数化比较结构?我是 STL 的新手,所以很抱歉我对这里发生的事情没有更好的理解。

最佳答案

您正在尝试将对象作为模板参数传递。这是行不通的。您应该提供比较器作为构造函数的参数,并将比较器的类型作为模板参数。

// declare type
typedef std::priority_queue<my::Process,
std::vector<my::Process>,
PrioritiseHighestResponseRatioNext > process_queue;
// ^^^ just a type, no object ^^^
// create object
process_queue rq(PrioritiseHighestResponseRatioNext(tick));

关于c++ - std::priority_queue 参数化比较结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12068197/

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