deque中指针的自定义比较器

custom comparator for pointers in a deque

本文关键字:自定义 比较器 指针 deque      更新时间:2023-10-16

我有一组指向结构的指针。我正试图用下面这样的比较器对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());

代码编译了,但排序函数没有按我希望的方式工作。。。我试过找这样的案子,但找不到确切的。此外,我是否能够像上面那样通过引用而不是值来传递const LogItem*?如果是,它的语法是什么?(我无法编译那个版本)

提前谢谢。

如果myDeque实际存储指向LogItemdeque<LogItem*>deque<const LogItem*>)的指针,则比较器的语法/接口没有问题。

即使比较器内部的逻辑看起来也是正确的(有点冗长,但它应该根据需要按升序对元素进行排序)。

如果您在执行代码时立即分段,那么问题可能不在于比较器,甚至不在于排序,而在于deque中存储的内容(例如:悬空指针、null、指向无效数据的指针等)。

由于它是被请求的,如果你想比较引用而不是指针,那么比较器谓词的签名将是:

bool operator() (const LogItem& a, const LogItem& b) const

然而,只有当您在deque中存储LogItem对象而不是指向它们的指针(例如deque<LogItem>,而不是deque<LogItem*>)时,这才适用。