我試圖建立一個std::set
與一個自定義的命令來存儲「任務」內,我想知道是否有可能得到什麼我需要一個簡單的std
容器。一套自定義比較仿函數,在相等的情況下可預測
設定是這樣的:
std::set<Task*, CompareTasks> taskList;
而且class Task
有一個公共double priority
成員。
我需要什麼:
- 編輯:每個任務
Task *
必須taskList
- 任務中是唯一的,必須在降低
priority
進行排序。 - 如果
task2
恰好共享同一個priority
與task1
已經在列表中,然後「先到先得」:task2
必須task1
之後插入。
我試圖用仿函數:
class CompareTasks
{
public:
bool operator()(Task* const& a, Task* const& b)
{
return a->priority < b->priority;
}
};
但任務然後我插入,有一個已經記錄priority
,只是..根本不插入。因此,我懷疑taskList
的鍵是它們本身的優先級,而不是std::set<Task*, CompareTasks>
中寫的指針值Task*
。我如何檢查是否是這種情況?
更富戲劇性的是:由於訂貨必須在創建比較函數子弱爲std
容器,有沒有什麼辦法,我就可以只用std::set
實現這一目標?
好吧,這是來自C++ 11的一個不錯的保證,我會嘗試一個multiset。謝謝!^^我只是想知道這個'std :: set'的非常*鍵*:它們應該指向任務而不是優先級,對吧?然後兩個具有相同'priority'的'Task'應該有兩個不同的'Task *'地址,因此不能被認爲是「複製的」。這個推理有什麼問題? –
好吧,我認爲它越來越清晰:他們*有*不同的鍵,但他們被認爲是「等效」,因爲我提供了這個比較器..棘手的把戲:P –
好吧,它現在可以用multiset工作,但我感覺我在戰鬥中失去了一些東西:我如何確定在'std :: multiset taskList'中沒有兩次插入相同的Task *'?我需要自己處理嗎?這就是在第一個地方使用一個簡單的'std :: set'的完整點。:\ –