如何实现具有指针的c priority_queue的排序方法
发布时间:2020-12-16 03:22:24 所属栏目:百科 来源:网络整理
导读:我的优先队列声明为: std::priority_queue*MyClass queue;class MyClass { bool operator( const MyClass* m ) const;} 不排队队列中的项目. 哪里不对?我不想实现一个不同的(比较)类. 答案总结: 问题是,指针地址被排序.避免这种情况的唯一方法是“比较指
我的优先队列声明为:
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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |