用于deque中指针的自定义比较器

时间:2015-11-17 17:42:36

标签: c++

我有一个指向结构的指针deque。 我试图用比较器对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 *而不是像上面那样做的值吗?如果是这样,它的语法是什么? (我无法编译该版本)

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

即使比较器内部的逻辑显得正确(稍微冗长,但它应按要求按升序对元素进行排序)。

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

自请求以来,比较器谓词的签名是否要比较引用而不是指针将是:

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

但是,这仅适用于存储LogItem对象而不是在双端队列中指向它们的指针(deque<LogItem>,例如,不是deque<LogItem*>)。

相关问题