關於結構體內嵌比較函數後,sort排序和優先隊列內元素的順序

關於結構體內嵌比較函數後的排序規則,見如下代碼註釋

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章