我正在尝试使用自定义比较器创建优先级队列:
std::priority_queue<int, std::vector<int>, MyComparator> pq;
Run Code Online (Sandbox Code Playgroud)
我的问题是MyComparator有一个存储附加状态的方法.因为MyComparator被复制到优先级队列(据我所知),我无法在优先级队列所持有的MyComparator实例上调用此方法.有没有办法:
CB *_*ley 10
STL容器中使用的比较对象以及STL算法中使用的谓词必须是可复制的对象和方法,并且algorthims可以随意复制这些函数.
这意味着如果您的比较对象包含状态,则必须正确复制此状态,因此您可能需要提供合适的复制构造函数和复制赋值运算符.
如果您希望比较对象包含可变状态,则问题会更复杂,因为比较对象的任何副本都需要共享可变状态.如果您可以将状态维护为单独的对象,那么您可以让比较对象保持指向此外部状态的指针; 如果不是,你可能会发现你需要共同所有权,所以你可能需要tr1::shared_ptr管理这个.