當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ priority_queue emplace()用法及代碼示例


優先級隊列是一種容器適配器,經過專門設計,使得隊列的第一個元素在隊列中的所有元素中占最大。

priority_queue::emplace()

此函數用於將新元素插入優先級隊列容器,該新元素將添加到優先級隊列的頂部。
用法:

priorityqueuename.emplace(value)
參數:
The element to be inserted into the priority
queue is passed as the parameter.
Result:
The parameter is added to the
priority queue at the top position.

例子:


Input :mypqueue{5, 4};
         mypqueue.emplace(6);
Output:mypqueue = 6, 5, 4

Input :mypqueue{};
         mypqueue.emplace(4);
Output:mypqueue = 4

注意:在priority_queue容器中,這些元素以相反的順序打印,因為先打印頂部,然後再移動到其他元素。

錯誤和異常
1.它具有強大的異常保證,因此,如果引發異常,則不會進行任何更改。
2.參數應與容器的類型相同,否則將引發錯誤。

// INTEGER PRIORITY QUEUE 
// CPP program to illustrate 
// Implementation of emplace() function 
#include <iostream> 
#include <queue> 
using namespace std; 
  
int main() 
{ 
    priority_queue<int> mypqueue; 
    mypqueue.emplace(1); 
    mypqueue.emplace(2); 
    mypqueue.emplace(3); 
    mypqueue.emplace(4); 
    mypqueue.emplace(5); 
    mypqueue.emplace(6); 
    // queue becomes 1, 2, 3, 4, 5, 6 
  
    // printing the priority queue 
    cout << "mypqueue = "; 
    while (!mypqueue.empty()) { 
        cout << mypqueue.top() << " "; 
        mypqueue.pop(); 
    } 
  
    return 0; 
}
輸出:
mypqueue = 6 5 4 3 2 1
// CHARACTER PRIORITY QUEUE 
// CPP program to illustrate 
// Implementation of emplace() function 
#include <iostream> 
#include <queue> 
using namespace std; 
  
int main() 
{ 
    priority_queue<char> mypqueue; 
    mypqueue.emplace('A'); 
    mypqueue.emplace('b'); 
    mypqueue.emplace('C'); 
    mypqueue.emplace('d'); 
    mypqueue.emplace('E'); 
    mypqueue.emplace('f'); 
    // queue becomes A, b, C, d, E, f 
  
    // printing the priority queue 
    cout << "mypqueue = "; 
    while (!mypqueue.empty()) { 
        cout << mypqueue.top() << " "; 
        mypqueue.pop(); 
    } 
  
    return 0; 
}
輸出:
mypqueue = f d b E C A
// STRING PRIORITY QUEUE 
// CPP program to illustrate 
// Implementation of emplace() function 
#include <iostream> 
#include <queue> 
#include <string> 
using namespace std; 
  
int main() 
{ 
    priority_queue<string> mypqueue; 
    mypqueue.emplace("portal"); 
    mypqueue.emplace("computer science"); 
    mypqueue.emplace("is a"); 
    mypqueue.emplace("GEEKSFORGEEKS"); 
    // queue becomes portal, computer scince, 
    // is a, GEEKSFORGEEKS 
  
    // printing the priority queue 
    cout << "mypqueue = "; 
    while (!mypqueue.empty()) { 
        cout << mypqueue.top() << " "; 
        mypqueue.pop(); 
    } 
  
    return 0; 
}
輸出:
mypqueue = portal is a computer science GEEKSFORGEEKS

應用:
給定多個整數,使用emplace()將它們添加到優先級隊列中,並找到優先級隊列的大小。

Input:5, 13, 0, 9, 4
Output:5

算法
1.使用emplace()一次將給定元素插入優先級隊列容器。
2.繼續彈出優先級隊列的元素,直到其變空,然後遞增計數器變量。
3.打印計數器變量。

// CPP program to illustrate 
// Application of emplace() function 
#include <iostream> 
#include <queue> 
using namespace std; 
  
int main() 
{ 
    int c = 0; 
  
    // Empty Priority Queue 
    priority_queue<int> pqueue; 
  
    // inserting elements into priority_queue 
    pqueue.emplace(5); 
    pqueue.emplace(13); 
    pqueue.emplace(0); 
    pqueue.emplace(9); 
    pqueue.emplace(4); 
  
    // Priority queue becomes 13, 9, 5, 4, 0 
  
    // Counting number of elements in queue 
    while (!pqueue.empty()) { 
        pqueue.pop(); 
        c++; 
    } 
    cout << c; 
}
輸出:
5

時間複雜度:O(1)

emplace()和push()
當我們使用push()時,我們創建一個對象,然後將其插入priority_queue。使用emplace(),該對象就地構建並保存不必要的副本。有關詳細信息,請參見C++ STL中的emplace vs insert。

// C++ code to demonstrate difference between 
// emplace and insert 
#include<bits/stdc++.h> 
using namespace std; 
    
int main() 
{ 
    // declaring priority queue 
    priority_queue<pair<char, int>> pqueue; 
        
    // using emplace() to insert pair in-place 
    pqueue.emplace('a', 24); 
        
    // Below line would not compile 
    // pqueue.push('b', 25);     
        
    // using push() to insert pair  
    pqueue.push(make_pair('b', 25));     
        
    // printing the priority_queue 
    while (!pqueue.empty()) { 
        pair<char, int> p =  pqueue.top(); 
        cout << p.first << " "
             << p.second << endl; 
        pqueue.pop(); 
    } 
    
    return 0; 
}
輸出:
b 25
a 24


相關用法


注:本文由純淨天空篩選整理自AyushSaxena大神的英文原創作品 priority_queue emplace() in C++ STL。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。