C++sort()ソート関数の使い方
この文書はhttps://blog.csdn.net/l198738655/article/details/79872738
この関数は、配列、またはチェーンテーブルリスト、ベクトルをソートできます.
実装原理:sortは単純な高速ソートではなく、通常の高速ソートを最適化し、挿入ソートとプッシュソートを組み合わせています.システムはあなたのデータ形式とデータ量に基づいて自動的に適切なソート方法を選択します.これは、ソートするたびに1つの方法しか選択されないというわけではありません.1回の完全なソートで異なる方法を選択します.例えば、データ量の大きい配列をソートし、高速ソートを採用し始め、セグメント再帰します.セグメント化後の各セグメントのデータ量が小さい値に達すると、下に戻るのではなく、ソートの挿入を選択します.再帰が深すぎる場合は、ソートのプッシュを選択します.
この関数には3つのパラメータがあります.
パラメータ1:最初のパラメータは配列の最初のアドレスで、一般的に配列名を書けばいいです.配列名はポインタ定数だからです.
パラメータ2:2番目のパラメータは、ヘッダアドレスに配列の長さn(テールアドレスの次のアドレスを表す)を加えることが比較的よく理解される.
パラメータ3:デフォルトは記入しなくてもよく、sortを記入しないとデフォルトで配列昇順でソートされます.つまり1,2,3,4のソートです.ソート関数をカスタマイズして、ソート方式を降順に変更することもできます.つまり、4,3,2,1です.
この関数を使用するには、次の手順に従います.
名前空間をエクスポートします.
簡単な例:配列Aの0~n-1要素を昇順に並べ替え、sort(A,A+n)を書けばよい.ベクトルVについてもsort(v.begin()、v.end()でよい.
ソート規則関数の自己作成
例:
sort拡張:
sortは上のように簡単に使用できるだけでなく、sortを拡張することができます.肝心なのは3番目のパラメータで、降順配列を考えています.あるいは、私は簡単な配列ではなく、構造体、クラスをどうするかです.以下にいくつかの方法と例を示します.
方法一:比較関数の定義(最もよく使われる)/ケース一:配列配列
//ケース2:構造体ソート
注意:比較方法は、構造体またはクラスで定義することもできます.
方法2:標準ライブラリ関数の使用
また、実際にはもう少し怠けてもいいです.標準ライブラリにはすでに既成品があります.どこにあるの?答えはfunctionalです.includeに入ってみましょう.functionalはテンプレートベースの比較関数オブジェクトの山を提供し、それらは:equal_to、not_equal_to、greater、greater_equal、less、less_equal.これらのものの使い方は名前を見ればわかります.ここで、私のsortが使うのはgreaterとlessだけで十分です.使い方は以下の通りです.
●昇順:sort(begin,end,less()
●降順:sort(begin,end,greater()
欠点:単純なソートを実現するだけで、構造体は適用されません.
方法3:構造体またはクラスの比較演算子をリロードする
//ケース1:構造体内部での再負荷
//ケース2:外部でのリロード
注意:必ずリロードしてください
方法4:比較クラスの宣言(少用)
リスト(チェーンテーブル)はsort()インスタンスを使用します.
参考文献:https://www.cnblogs.com/AlvinZH/p/6784862.html?utm_source=itdadao&utm_medium=referral
参考文献:https://www.cnblogs.com/luorende/p/6121906.html
sort(first_pointer,first_pointer+n,cmp)
この関数は、配列、またはチェーンテーブルリスト、ベクトルをソートできます.
実装原理:sortは単純な高速ソートではなく、通常の高速ソートを最適化し、挿入ソートとプッシュソートを組み合わせています.システムはあなたのデータ形式とデータ量に基づいて自動的に適切なソート方法を選択します.これは、ソートするたびに1つの方法しか選択されないというわけではありません.1回の完全なソートで異なる方法を選択します.例えば、データ量の大きい配列をソートし、高速ソートを採用し始め、セグメント再帰します.セグメント化後の各セグメントのデータ量が小さい値に達すると、下に戻るのではなく、ソートの挿入を選択します.再帰が深すぎる場合は、ソートのプッシュを選択します.
この関数には3つのパラメータがあります.
パラメータ1:最初のパラメータは配列の最初のアドレスで、一般的に配列名を書けばいいです.配列名はポインタ定数だからです.
パラメータ2:2番目のパラメータは、ヘッダアドレスに配列の長さn(テールアドレスの次のアドレスを表す)を加えることが比較的よく理解される.
パラメータ3:デフォルトは記入しなくてもよく、sortを記入しないとデフォルトで配列昇順でソートされます.つまり1,2,3,4のソートです.ソート関数をカスタマイズして、ソート方式を降順に変更することもできます.つまり、4,3,2,1です.
この関数を使用するには、次の手順に従います.
#include
名前空間をエクスポートします.
using namespace std;
簡単な例:配列Aの0~n-1要素を昇順に並べ替え、sort(A,A+n)を書けばよい.ベクトルVについてもsort(v.begin()、v.end()でよい.
ソート規則関数の自己作成
例:
bool compare(int a,int b)
{
return ab,
}
sort拡張:
sortは上のように簡単に使用できるだけでなく、sortを拡張することができます.肝心なのは3番目のパラメータで、降順配列を考えています.あるいは、私は簡単な配列ではなく、構造体、クラスをどうするかです.以下にいくつかの方法と例を示します.
方法一:比較関数の定義(最もよく使われる)/ケース一:配列配列
int A[100];
bool cmp1(int a,int b)//int
{
return a>b;//
//return a
//ケース2:構造体ソート
Student Stu[100];
bool cmp2(Student a,Student b)
{
return a.id>b.id;//
//return a.id
注意:比較方法は、構造体またはクラスで定義することもできます.
方法2:標準ライブラリ関数の使用
また、実際にはもう少し怠けてもいいです.標準ライブラリにはすでに既成品があります.どこにあるの?答えはfunctionalです.includeに入ってみましょう.functionalはテンプレートベースの比較関数オブジェクトの山を提供し、それらは:equal_to、not_equal_to、greater、greater_equal、less、less_equal.これらのものの使い方は名前を見ればわかります.ここで、私のsortが使うのはgreaterとlessだけで十分です.使い方は以下の通りです.
●昇順:sort(begin,end,less()
●降順:sort(begin,end,greater()
欠点:単純なソートを実現するだけで、構造体は適用されません.
#include
#include
#include
#include
using namespace std;
//
sort(A,A+100,greater());//
sort(A,A+100,less());//
方法3:構造体またはクラスの比較演算子をリロードする
//ケース1:構造体内部での再負荷
typedef struct Student{
int id;
string name;
double grade;
bool operators.id;//
//return id V;
sort(V.begin(),V.end());
//ケース2:外部でのリロード
vector V;
bool operators2.id;//
//return s1.id
注意:必ずリロードしてください
方法4:比較クラスの宣言(少用)
struct Less
{
bool operator()(const Student& s1, const Student& s2)
{
return s1.id
リスト(チェーンテーブル)はsort()インスタンスを使用します.
#include "stdafx.h"
#include
#include
#include
#include
#include "stdlib.h"
#include
using namespace std;
// list LISTINT
typedef list LISTINT;
// LISTCHAR
typedef list LISTCHAR;
int _tmain(int argc, _TCHAR* argv[])
{
// list
// LISTINT listOne list
LISTINT listOne;
// i
LISTINT::iterator i;
// listOne
listOne.push_front (2);
listOne.push_front (1);
// listOne
listOne.push_back (5);
listOne.push_back (4);
listOne.push_back (9);
listOne.push_back (7);
listOne.push_back (12);
// listOne ,
cout<
参考文献:https://www.cnblogs.com/AlvinZH/p/6784862.html?utm_source=itdadao&utm_medium=referral
参考文献:https://www.cnblogs.com/luorende/p/6121906.html