我试图用一个优先级队列将与下面的成员变量反对自定义:优先级队列自定义比较
class Jobs{
string id;
string location;
int start;
int end;
};
我会从文件中读取作业ID的HashMap和的重量工作。我将最终有一个
unordered_map<string, int> jobWeight;
举行此信息。我希望将作业列表最终以基于hashmap jobWeight的优先级推送到priority_queue中。最重要的工作应该是第一位的。
参考其他教程,我注意到你应该创建一个单独的类/结构并实现operator()。然后你可以将这个比较类传递给priority_queue参数。但是,看起来priority_queue使用默认参数创建了这个比较器类的新实例?我怎么能够从这个比较类中引用我的jobWeight hashmap?
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'并把它作为参数传递给你的比较器或者什么? – WhiZTiM
这个图是否用于比这个比较器的其他任何东西?而且:它有多大? –
@DanielJour当我插入到我的优先级队列中时,地图只应用于比较。这张地图会和工作数量一样大(每个工作都会有一定的重量),因此可能会超大。目前,最终目标是在每个时间范围内选择一份工作(工作从开始到结束不需要持续整个工作时间......所以选择工作的贪婪方法应该足够了,我只是使用priority_queue填满整个时间范围。 –