您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++中sort()函數和priority_queue容器的區別是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C++中sort()函數和priority_queue容器的區別是什么”文章能幫助大家解決問題。
普通的queue是一種先進先出的數據結構,元素在隊列尾追加,而從隊列頭刪除。
priority_queue中元素被賦予優先級。在創建的時候根據優先級進行了按照從大到小或者從小到大進行了自動排列(大頂堆or小頂堆)。可以以O(log n) 的效率查找一個隊列中的最大值或者最小值;
雖然兩者第三個參數默認的都是less,但兩者參數比較函數的區別是相反的:
小細節 sort中需要傳對象,得less(),priority_queue中需要傳類型less即可;
#include<iostream> #include<vector> #include<queue> using namespace std; int main() { vector<int>arr2 = {3,2,1}; sort(arr2.begin(),arr2.end(),less<int>()); //輸出sort()之后的vector for (int i = 0; i < 3; i++) { cout << arr2[i] << ' '; } cout << endl; priority_queue<int,vector<int>,less<int>>arr; arr.push(3); arr.push(2); arr.push(1); //輸出priority_queue while (!arr.empty()) { cout<<arr.top()<<' '; arr.pop(); } cout << endl; return 0; }
運行結果
則:
sort()排序是從小到大,即less是升序;
priority_queue是大頂堆,輸出之后是從大到小,即降序;
#include<iostream> #include<vector> #include<queue> using namespace std; int main() { vector<int>arr2 = {3,2,1}; sort(arr2.begin(),arr2.end(),greater<int>()); //輸出sort()之后的vector for (int i = 0; i < 3; i++) { cout << arr2[i] << ' '; } cout << endl; priority_queue<int,vector<int>, greater<int>>arr; arr.push(3); arr.push(2); arr.push(1); //輸出priority_queue while (!arr.empty()) { cout<<arr.top()<<' '; arr.pop(); } cout << endl; return 0; }
運行結果:
則:
sort()排序是從大到小,即greater是降序;
priority_queue是小頂堆,輸出之后是從小到大,即升序;
struct cmp1 //等價于less的內部構造,效果和上面分析的less情況一樣 { opeartor()(data x1,data x2){ return x1<x2; } }; struct cmp2 //等價于less的內部構造,效果和上面分析的greater情況一樣 { opeartor()(data x1,data x2){ return x1>x2; } };
關于“C++中sort()函數和priority_queue容器的區別是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。