簡體   English   中英

自定義比較器,用於雙端隊列中的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM