我的优先队列声明为:
std::priority_queue<*MyClass> queue; class MyClass { bool operator<( const MyClass* m ) const; }
不排队队列中的项目.
哪里不对?我不想实现一个不同的(比较)类.
答案总结:
问题是,指针地址被排序.避免这种情况的唯一方法是“比较指针”的类.
现在实现为:
std::priority_queue<*MyClass,vector<*MyClass>,MyClass::CompStr > queue; class MyClass { struct CompStr { bool operator()(MyClass* m1,MyClass* m2); } }
解决方法
给比较函数ptr_less.
如果您希望ptr_less与std库(binder,composers,…)的其余部分兼容:
template<class T> struct ptr_less : public binary_function<T,T,bool> { bool operator()(const T& left,const T& right) const{ return ((*left) <( *right)); } }; std::priority_queue<MyClass*,vector<MyClass*>,ptr_less<MyClass*> > que;
否则您可以使用简化版本:
struct ptr_less { template<class T> bool operator()(const T& left,const T& right) const { return ((*left) <( *right)); } }; std::priority_queue<MyClass*,ptr_less > que;
原文地址:https://www.jb51.cc/c/111709.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。