1. 程式人生 > >c++中的sort 排序函式 less和greater使用

c++中的sort 排序函式 less和greater使用

c++中的sort 排序函式

  1. 預設排序,從小到大
template <class RandomAccessIterator>
  void sort (RandomAccessIterator first, RandomAccessIterator last);
  1. 通過第三個引數來執行排序(從小到大或者從大到小)
template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j){ return (i<j); }

struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
  int
myints[] = {32,71,12,45,26,80,53,33}; std::vector<int> my_vector (myints, myints+8); // 32 71 12 45 26 80 53 33 // using default comparison (operator <): std::sort (my_vector.begin(), my_vector.begin()+4); //(12 32 45 71)26 80 53 33 // using function as comp std::sort (my_vector.begin()+4
, my_vector.end(), myfunction); // 12 32 45 71(26 33 53 80) // using object as comp std::sort (my_vector.begin(), my_vector.end(), myobject); //(12 26 32 33 45 53 71 80) // print out content: std::cout << "my_vector contains:"; for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }
my_vector contains: 12 26 32 33 45 53 71 80

另外,c++中提供了比較函式,就不需要我們來重新寫比較函數了

less<type>()    //從小到大排序 <
grater<type>()  //從大到小排序 >
less_equal<type>()  //  <=
gtater_equal<type>()//  >=
//這四種函式
// greater example
    #include <iostream>     // std::cout
    #include <functional>   // std::greater
    #include <algorithm>    // std::sort

    int main () {
      int numbers[]={20,40,50,10,30};
      std::sort (numbers, numbers+5, std::greater<int>());
      for (int i=0; i<5; i++)
        std::cout << numbers[i] << ' ';
      std::cout << '\n';
      return 0;
    }

set集合預設排序方式 從小到大即less的,我們可以通過建立set的時候指定排序方式

set<int,greater<int>> m_set = { 1, 1, 5, 3, 2, 9, 6, 7, 7 };
for each (auto var in m_set)
{
    cout << var << " ";
}

另外如果閒建立的比較繁瑣我們可以用typedef來重新命名

typedef std::set<int,std::greater<int>> IntSet;
typedef std::set<int,std::less<int>> IntSet;
IntSet my_set
IntSet::iterator ipos;

相關推薦

c++sort 排序函式 lessgreater使用

c++中的sort 排序函式 預設排序,從小到大 template <class RandomAccessIterator> void sort (Random

探究C++的成員函式指標虛擬函式

say something 相信對C++物件有一定了解的話,應該都會知道,在C++中物件的實現中,成員函式和成員變數是分離的 所以我們所談到的非靜態成員函式其實只是一個普通的函式(不過被編譯器所隱藏,必須繫結到特定的物件上才能執行) 靜態成員函式實際上就真

C++sort函式從大到小排序的兩種方法

1.sort函式描述 而且,sort函式的演算法效率相當於快排,使用sort函式有時候可能比我們自己寫一個排序演算法,可能效率更高。 2.使用sort函式排序 #include <iostream> #include <algorithm> usin

sort函式的用法(C++排序函式的呼叫)對陣列進行排序,在c++有庫函式幫我們實現,這們就不需要我們自己來程式設計進行排序了。

對陣列進行排序,在c++中有庫函式幫我們實現,這們就不需要我們自己來程式設計進行排序了。 (一)為什麼要用c++標準庫裡的排序函式 Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用

c++sort函式排序自己寫的類

定義排序函式:方法1:宣告外部比較函式bool Less(const Student& s1, const Student& s2) { return s1.name < s2.name; //從小到大排序 } std::sort(sutVe

C的qsort函式C++sort函式的理解與使用

一、qsort()函式 原型: _CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); 引數解釋: 1、待排序陣列首地址;2、陣列中待排序元素數

C++sort函式用法

C++中sort函式用法 排序示例: 輸入兩個數n,t,其中n是待排的結構體個數,t=0代表用降序排序,t = 1表示用升序排序 例如這樣: 例示: jack 70 peter 96 Tom 70 smith 67 從高到低 成績 peter 96 jack 70

python排序函式sorted以及列表排序方法sort()

【時間】2018.10.30 【題目】python中的排序函式sorted以及列表排序方法sort()   概述 Python list內建sort()方法用來排序,也可以用python內建的全域性sorted()方法來對可迭代的序列排序生成新的序列。如果要讀取資料夾下面的

C++ sort排序函式用法

最近在刷ACM經常用到排序,以前老是寫冒泡,可把冒泡帶到OJ裡後發現經常超時,所以本想用快排,可是很多學長推薦用sort函式,因為自己寫的快排寫不好真的沒有sort快,所以毅然決然選擇sort函式 用法 1、

C++的虛擬函式和解構函式的定義作用

虛擬函式 定義: C++中的虛擬函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。 虛擬函式的使用方法是: 在基類用virtual宣告成員函式為虛擬函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能

C++的仿函式,std::functionbind()的用法

1.仿函式:又叫std::function,是C++中的一個模板類 2.C語言中的函式指標: int  add(int a,int b) {   return a+b; } typedef int (*func)(int,int);//給函式型別定義別名

C++ sort排序函式

注意事項 1、sort函式可以三個引數也可以兩個引數,必須的標頭檔案#include < algorithm>和using namespace std;  2、它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n) 3、Sort函式有三個引數:(第

c++sort()函式的用法簡介

程式碼: #include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; int main() {

C++預設建構函式建構函式初始化列表

1、預設建構函式和建構函式 (1)建構函式:C++用於構建類的新物件時需要呼叫的函式,該函式無返回型別!(注意:是“無”! 不是空!(void))。 (2)預設建構函式:預設建構函式是在呼叫時不需要顯示地傳入實參的建構函式。 一個類如果自己沒有定義建構函式,則會有一個無參且函式體也是空的

C++ sort 函式的使用詳解

STL主要包含容器,迭代器,演算法三塊內容,使用者可以對容器進行一系列的操作,比如遍歷和計算,而STL提供的迭代器和容器完美地提供了這樣的介面。其中std::vector是最常用的容器之一,vector是一個模板類,定義在名稱空間namespace下,使用vector需要在包含相關標頭檔案。今天主要講解對ve

C++的虛擬函式與靜態聯編動態聯編

          程式在呼叫函式時,將使用哪個可執行程式碼塊呢?編譯器負責回答這個問題,將原始碼中的函式呼叫解釋為執行特定的函式程式碼塊被稱為函式名聯編。在C中,因為每個函式名都對應一個不同的函式,而在C++中,由於函式過載的緣故,編譯器必須檢視函式引數以及函式名才能確定

C++-如何跟蹤函式

下面是程式的輸出: 用這種方法我們可以通過log可以很清楚的看到程式執行到函式foo了,也就是通過程式的輸出“hello”和“Goodbye”知道程式執行到foo這個函數了。換句話說我們通過 在函式中插入了一個Trace類物件來知道該函式什麼時候被呼叫的。 但是我們的程式肯定不止一個函式,如果我們需要對

關於C++vector結構的使用它的使用函式

這是來源於c++標準模板庫STL中的一種順序結構 關於順序結構還有兩種即:c++list  和  c++double-ended queues Vectors 包含著一系列連續儲存的元素,其行為和陣列類似。訪問Vector中的任意元素或從末尾新增元素都可以在常量級時間複雜

C的自殺函式C++的自殺類

今天看glibc 2.7的記憶體分配程式碼,注意到一個詭異現象:某函式的指標自我清空。也就是說,此函式指標只能用一次。具體說來就是指向函式malloc_hook_ini的函式指標__malloc_hook。於是自己嘗試了一下這類函式的寫法。 // Function-Suic

C++類成員函式的過載、覆蓋隱藏的區別,超清楚!

1.成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 2.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同;