当前位置:  开发笔记 > 编程语言 > 正文

具有重复键的STL优先级队列 - 是否可能?

如何解决《具有重复键的STL优先级队列-是否可能?》经验,为你挑选了2个好方法。

我需要在一些数据结构中存储我的类A对象.另外,我希望它们能够根据一个键自动排序,在我的例子中是另一个B类的嵌入对象.

因此我决定使用STL优先级队列.

但是,2个或更多个对象B可能具有相同的键值.

我的问题:

STL优先级队列是否允许重复键?

如果它确实应该考虑什么,我应该使用哪个谓词?

我知道我可以使用multiset但它的Big O表示法性能更差,这就是为什么我想使用优先级队列.



1> Konrad Rudol..:

STL优先级队列是否允许重复键?

是.

如果它做了我应该考虑的事情

相等元素之间的顺序可以任意改变.

我应该使用哪个谓词?

那是什么意思?这完全取决于你的语义.



2> hazzen..:

是的,它支持重复键.

从doucumentation:

void push(const value_type& x) Inserts x into the priority_queue.
                               Postcondition: size() will be incremented by 1. 

一个简单的测试证实了这一点:

int main() {
  priority_queue q;
  q.push(5);
  q.push(5);
  cout << q.top() << endl;
  q.pop();
  cout << q.top() << endl;
  q.pop();
}

输出:

5
5

至于谓词,使用你以前用过的任何东西 - 优先级队列保证不会因为允许相同的元素而被破坏,所以你的算法应该可以正常工作.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有