deque中指针的自定义比较器
custom comparator for pointers in a 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*?如果是,它的语法是什么?(我无法编译那个版本)
提前谢谢。
如果myDeque
实际存储指向LogItem
(deque<LogItem*>
或deque<const LogItem*>
)的指针,则比较器的语法/接口没有问题。
即使比较器内部的逻辑看起来也是正确的(有点冗长,但它应该根据需要按升序对元素进行排序)。
如果您在执行代码时立即分段,那么问题可能不在于比较器,甚至不在于排序,而在于deque中存储的内容(例如:悬空指针、null、指向无效数据的指针等)。
由于它是被请求的,如果你想比较引用而不是指针,那么比较器谓词的签名将是:
bool operator() (const LogItem& a, const LogItem& b) const
然而,只有当您在deque中存储LogItem对象而不是指向它们的指针(例如deque<LogItem>
,而不是deque<LogItem*>
)时,这才适用。
相关文章:
- std::设置自定义比较器
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- 使用迭代器的自定义比较器函数
- Cython中带有自定义比较器的优先级队列
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 为什么在类或结构中传递自定义比较器函数?
- 在priority_queue中使用默认容器但自定义比较器
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- C++ priority_queue与自定义比较器并删除任何项目
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- 通过函数指针对类内的 STL SET 使用自定义比较器
- 基于对象的两个属性的自定义比较器会引发异常
- 如何使用自定义比较器初始化类数据成员,该成员是 std::set
- 标准::set_intersection 带自定义比较器
- 使用自定义比较器C++映射,不插入所有元素
- 优先队列的自定义比较器
- C++ STL . 自定义比较器如何工作?