我需要在一些数据结构中存储我的类A对象.另外,我希望它们能够根据一个键自动排序,在我的例子中是另一个B类的嵌入对象.
因此我决定使用STL优先级队列.
但是,2个或更多个对象B可能具有相同的键值.
我的问题:
STL优先级队列是否允许重复键?
如果它确实应该考虑什么,我应该使用哪个谓词?
我知道我可以使用multiset但它的Big O表示法性能更差,这就是为什么我想使用优先级队列.
STL优先级队列是否允许重复键?
是.
如果它做了我应该考虑的事情
相等元素之间的顺序可以任意改变.
我应该使用哪个谓词?
那是什么意思?这完全取决于你的语义.
是的,它支持重复键.
从doucumentation:
void push(const value_type& x) Inserts x into the priority_queue. Postcondition: size() will be incremented by 1.
一个简单的测试证实了这一点:
int main() { priority_queueq; q.push(5); q.push(5); cout << q.top() << endl; q.pop(); cout << q.top() << endl; q.pop(); }
输出:
5 5
至于谓词,使用你以前用过的任何东西 - 优先级队列保证不会因为允许相同的元素而被破坏,所以你的算法应该可以正常工作.