嗨,我正在解決某種排序算法問題。在C++ std :: priority_queue中反轉字母順序的簡單方法?
我使用C++ STL priority_queue與STL隊列頭排序字符串輸入與反向字母順序與一些整數。
我知道有一個簡單的想法來實現像這樣的優先級隊列的整數排序的增量順序。
#include <queue>
priority_queue<int> pq;
int arr[5] = {4,3,2,1,5};
for(int i = 0; i < 5; i++)
pq.push(-arr[i]);
while(!pq.empty()) {
cout << -pq.top() << endl;
pq.pop();
}
//the result may be 1, 2, 3, 4, 5
或者我可以用更少的操作實現這樣
priority_queue<int, vector<int>, less<int>> pq;
int arr[5] = {4,3,2,1,5};
for(int i = 0; i < 5; i++)
pq.push(arr[i]);
while(!pq.empty()) {
cout << pq.top() << endl;
pq.pop();
}
//the result may be 1, 2, 3, 4, 5
問題是我使用複雜的數據結構是這樣
priority_queue<pair<int, pair<int, pair<int, string>>>> pq;
我知道我可以解決這個問題, priority_queue運算符重載。
但是有沒有簡單體面的方式來實現逆序字母順序沒有實現這樣的運算符重載?
謝謝,但那個答案不是我想要的。我沒有問你如何製作自定義數據結構和比較運算符。我很好奇如何使用像pq.push(-arr [i])這樣的優先級隊列來製作簡單的反向字母排序順序。注重標題請 – JunsungChoi
@JunsungChoi那麼你不能簡單的做到這一點,因爲你的數據結構並不簡單。 – Sopel
@JunsungChoi你的**所需的答案是使用'std :: greater',正如我在答案中已經提到的那樣。然而,**專業開發人員**不會使用3級深的'std :: pair',因爲它會使代碼難以理解。 – Phil1970