STL priority_queue复制比较器类

the*_*der 4 c++ stl

我正在尝试使用自定义比较器创建优先级队列:

std::priority_queue<int, std::vector<int>, MyComparator> pq;
Run Code Online (Sandbox Code Playgroud)

我的问题是MyComparator有一个存储附加状态的方法.因为MyComparator被复制到优先级队列(据我所知),我无法在优先级队列所持有的MyComparator实例上调用此方法.有没有办法:

  • 获取对优先级队列所持有的MyComparator实例的访问权限,或者:
  • 以某种方式通过引用传递原始的MyComparator实例

CB *_*ley 10

STL容器中使用的比较对象以及STL算法中使用的谓词必须是可复制的对象和方法,并且algorthims可以随意复制这些函数.

这意味着如果您的比较对象包含状态,则必须正确复制此状态,因此您可能需要提供合适的复制构造函数和复制赋值运算符.

如果您希望比较对象包含可变状态,则问题会更复杂,因为比较对象的任何副本都需要共享可变状态.如果您可以将状态维护为单独的对象,那么您可以让比较对象保持指向此外部状态的指针; 如果不是,你可能会发现你需要共同所有权,所以你可能需要tr1::shared_ptr管理这个.