[英]custom comparator for pointers in a deque
我有一個過時的結構指針。 我正在嘗試使用以下比較器對雙端隊列進行排序:
struct timeCompE {
// ascending order by tt(unsigned long long), c(string), id(string)
bool operator() (const LogItem* a, const LogItem* b)const {
if (a->tt == b->tt) {
if (a->c == b->c) {
return (a->id < b->id);
} else {
return (a->c < b->c);
}
} else {
return (a->tt < b->tt);
}
}};
但是,排序功能似乎無法按照我想要的方式工作:
std::sort(myDeque.begin(), myDeque.end(), timeCompE());
代碼可以編譯,但是sort函數不能按照我想要的方式工作。我試圖查找類似的情況,但找不到確切的情況。 另外,我是否可以通過引用而不是像上面那樣通過值來傳遞const LogItem *? 如果是這樣,它的語法是什么? (我無法編譯該版本)
先感謝您。
只要myDeque
實際上存儲指向LogItem
指針( deque<LogItem*>
或deque<const LogItem*>
),比較器的語法/接口就沒有問題。
甚至比較器內部的邏輯看起來也是正確的(略為冗長,但應按需要將元素按升序排序)。
如果您立即在執行代碼時遇到問題,則問題可能出在您的比較器甚至排序上,而不是您在雙端隊列中存儲的內容(例如:懸空指針,空值,指向無效數據的指針等)。 )。
自從請求以來,如果要比較引用而不是指針,則比較器謂詞的簽名為:
bool operator() (const LogItem& a, const LogItem& b) const
但是,這僅在您存儲LogItem對象而不是在雙端隊列( deque<LogItem>
,例如,不是deque<LogItem*>
)中存儲指向它們的指針時適用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.