C++sort()ソート関数の使い方


この文書はhttps://blog.csdn.net/l198738655/article/details/79872738
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