如何实现具有指针的c priority_queue的排序方法

我的优先队列声明为:
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;

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...