我試圖用一個優先級隊列將與下面的成員變量反對自定義:優先級隊列自定義比較
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填滿整個時間範圍。 –