我有一个指向结构的指针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 *而不是像上面那样做的值吗?如果是这样,它的语法是什么? (我无法编译该版本)
提前谢谢。
答案 0 :(得分:1)
如果myDeque
实际存储指向LogItem
(deque<LogItem*>
或deque<const LogItem*>
)的指针,则比较器的语法/接口没有任何问题。
即使比较器内部的逻辑显得正确(稍微冗长,但它应按要求按升序对元素进行排序)。
如果您在执行代码时立即出现问题,可能问题不在于您的比较器甚至是排序,而是与您在deque中存储的内容有关(例如:悬空指针,空值,指向数据的指针)那是无效的,等等。)
自请求以来,比较器谓词的签名是否要比较引用而不是指针将是:
bool operator() (const LogItem& a, const LogItem& b) const
但是,这仅适用于存储LogItem对象而不是在双端队列中指向它们的指针(deque<LogItem>
,例如,不是deque<LogItem*>
)。