sort() 函數的用法

一、sort 函數的基本知識

1、sort 函數位於頭文件 #include<algorithm> 中,是C++標準庫中的函數。
2、sort 函數原型如下,包含三個參數分別爲

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
  • first :第一個是待排序序列的起始地址。
  • last:第二個是待排序序列的結束地址。
  • comp:第三個是排序方法,可以自己設定排序的規則。可以省略該參數,此時默認的是升序排列。

排序的序列是 [ first , last ) ,左開右閉的區間

二、常見應用

1、基本數據類型的排序

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

// 創建排序規則
bool comp01(int a, int b)
{
	return a > b;
}

int main()
{
	vector<int> v1 = { 10,20,40,5,60,9 };
	int arr[] = { 10,2,30,5,1,80,56 };
	// 默認的升序排列
	sort(v1.begin(), v1.end()); 
	//按照指定的規則進行降序排列
	sort(v1.begin(), v1.end(), comp01);
	// 對前四個元素進行排序。arr+4表示從起始位置向偏移4個位置
	sort(arr, arr + 4);
	cin.get();
}

2、自定義數據類型的排序

自定義的數據類型進行排序時,必須要指定排序的規則,因爲自定義的數據類型可能是符合類型,若不指定排序規則,程序無法直到根據什麼來進行排序

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

class A
{
public:
	A(string x, int y, double z) :name(x), age(y), score(z) {}

	string GetName()
	{
		return name;
	}

	int GetAge() 
	{ 
		return age;
	}

	int GetScore()
	{
		return score;
	}
private:
	string name;
	int age;
	int score;
};

// 創建排序規則:按年齡由大到小排序
bool comp01(A x, A y)
{
	return x.GetAge() > y.GetAge();
}

// 按分數由低到高排序
bool comp02(A x, A y)
{
	return x.GetScore() < y.GetScore();
}

void PrintVector(vector<A> v)
{
	for (auto &res : v)
	{
		cout << "name = " << res.GetName() << " \tage = " << res.GetAge() << " \tscore = " << res.GetScore() << '\n';
	}
	cout << endl;
}

int main()
{
	vector<A> v;
	A a1("tom", 10, 80);
	A a2("kity", 8, 88);
	A a3("Li", 15, 99);
	A a4("Zhang", 7, 82);

	v.push_back(a1);
	v.push_back(a2);
	v.push_back(a3);
	v.push_back(a4);

	// 對於自定義數據結構類型的排序必須要指定排序規則,否則程序不知道按那個成員的值進行排序
	sort(v.begin(), v.end(), comp01);
	PrintVector(v);

	sort(v.begin(), v.end(), comp02);
	PrintVector(v);

	cin.get();
}

運行結果如下:
在這裏插入圖片描述
【當在類中的使用sort函數時,需要將比較規則定義成 static 類型的】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章