2013-04-06 69 views
2

我有两个priority_queuefloat这样的:如何合并两个priority_queue?

std::priority_queue<float> queue1; 
std::priority_queue<float> queue2; 

,我需要将它们合并。但STL merge算法不允许与priority_queue直接工作:

merge(
    queue1.begin(), queue2.end(), 
    queue2.begin(), queue2.end(), 
    queue1 
); 

有没有办法合并priority_queue不使用辅助数据结构?

+1

恐怕你将不得不从一个队列流行元素,并将它们推入另一个。 – juanchopanza 2013-04-06 14:59:10

+0

标准库不包含合并两个堆的算法。由于'priority_queue'只是标准库的堆算法的一个包装,所以没有合并功能。 – 2013-04-06 15:01:46

回答

4

priority_queue是一个容器适配器,不是普通的标准容器。特别是,它不提供begin()end()成员函数。因此,你必须跳出一个队列的元素,并将它们推入其他:

while (!queue2.empty()) 
{ 
    queue1.push(queue2.top()); 
    queue2.pop(); 
}