關於結構體內嵌比較函數後的排序規則,見如下代碼註釋
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int MAX = 1000;
struct Node_t {
int val;
Node_t(int x) :val(x) {};
bool operator<(const Node_t x)const {//重定義了結構體類型的默認排序方式,沒有這個比較函數,默認排序方式是從小到大
return val > x.val;
}
};
vector<Node_t> node;
bool Compare(Node_t x, Node_t y) {
return x.val < y.val;
}
int main() {
//輸入
for (int i = 0; i < 5; i++) {
node.push_back(Node_t(rand()%100));
}
//打印
for (int i = 0; i < 5; i++) {
printf("%d ", node[i].val);
}
printf("\n");
//把所有元素加入優先隊列後輸出
priority_queue<Node_t> myQueue;//優先隊列主要通過堆排序實現,它的自動排序
//將按照與變量類型的默認方式相反的順序進行排序,比如此時結構體類型的默認方
//式是從大到小,而優先隊列的排序方式就是從小到大(小頂堆);
for (int i = 0; i < 5; i++) {
myQueue.push(node[i]);
}
printf("priority_queue:");
while (!myQueue.empty()) {
printf("%d ", myQueue.top().val);
myQueue.pop();
}
printf("\n");
//按默認方式排序後打印
sort(node.begin(),node.end());//按照按照變量類型的默認方式進行排序
printf("default sort:");
for (int i = 0; i < 5; i++) {
printf("%d ", node[i].val);
}
printf("\n");
//按Compare比較函數排序後打印
sort(node.begin(), node.end(), Compare);
printf("Function Compare:");
for (int i = 0; i < 5; i++) {
printf("%d ", node[i].val);
}
printf("\n");
return 0;
}