【发布时间】:2016-09-18 23:34:49
【问题描述】:
我正在尝试使用优先级队列来保存具有以下成员变量的自定义对象:
class Jobs{
string id;
string location;
int start;
int end;
};
我将从文件中读取作业 ID 和作业权重的哈希图。我最终会有一个
unordered_map<string, int> jobWeight;
持有这些信息。我想最终将作业列表推送到 priority_queue 中,优先级基于 hashmap jobWeight。权重最高的工作应该排在第一位。
参考其他教程,我注意到您应该创建一个单独的类/结构并实现 operator()。然后,您会将这个比较类传递给 priority_queue 参数。但是,priority_queue 似乎使用默认参数创建了此比较器类的新实例?我如何能够从这个比较器类中引用我的 jobWeight 哈希图?
class CompareJobs{
map<string, int> jobWeight;
public:
CompareJobs(map<string, int> &jobWeight){
jobWeight = jobWeight;
}
bool operator () (const Jobs &a, const Jobs &b){
return jobWeight.find(a)->second < jobWeight.find(b)->second;
}
};
【问题讨论】:
-
您最初声明
jobWeight是unordered_map。您想将其转换为map并将其作为参数传递给您的比较器还是什么? -
此地图是否用于此比较器以外的其他用途?还有:它有多大?
-
@DanielJour 该地图只应在我插入优先级队列时用于比较。该地图将与工作数量一样大..(每个工作都会有一个权重)因此可能非常大。目前,最终目标是为每个时间范围选择一份工作(这些工作不必从头到尾持续整个持续时间......所以选择工作的贪婪方法应该足够了。我只是使用priority_queue 填满整个时间范围。
标签: c++ c++11 priority-queue