2013-04-06 112 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(); 
}