1. 程式人生 > >C++標準庫 std::sort vector排序

C++標準庫 std::sort vector排序

前天要做一個對C++ STL的vector容器做一個排序操作,之前一直把vector當做一個容量可自動變化的陣列,是的,陣列,所以打算按照對陣列進行排序的方法:用快速排序或是氣泡排序等演算法自己寫一個排序的函式。後來覺得STL這麼強大,應該有它自己的排序方法(沒有好好學習啊),然後就去google了一下,果然有,而且可以自定義排序的函式,太強大了(而且效率應該比我自己寫的要好吧)。

[cpp] view plaincopyprint?
  1. // VectorSort.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <iostream>
  5. #include <vector>
  6. #include <algorithm>
  7. //先自定義一個結構體
  8. struct Test {  
  9.     int member1;  
  10.     int member2;  
  11. };  
  12. //自定義排序函式
  13. bool SortByM1( const Test &v1, const Test &v2)//注意:本函式的引數的型別一定要與vector中元素的型別一致
  14. {  
  15.     return v1.member1 < v2.member1;
    //升序排列
  16. }  
  17. void MyPushback(std::vector<Test> & vecTest, constint &m1, constint &m2)  
  18. {  
  19.     Test test;  
  20.     test.member1 = m1;  
  21.     test.member2 = m2;  
  22.     vecTest.push_back(test);  
  23. }  
  24. void PrintVector( std::vector<Test> & vec)  
  25. {  
  26.     /* 
  27.         插一句, 
  28.         vec.begin()對應的位置是向量的第一個位置,
     
  29.         vec.end()對應的是vector中的最後的一個元素位置的後面的一個位置(我認為,實際上是一個無效位置) 
  30.         文件上的定義:Returns an iterator referring to the past-the-end element in the vector container. 
  31.     */
  32.     for(std::vector<Test>::iterator it = vec.begin() ; it != vec.end() ; it++ )  
  33.     {  
  34.         std::cout<<it->member1<<'\t'<<it->member2<<std::endl;  
  35.     }  
  36. }  
  37. int _tmain(int argc, _TCHAR* argv[])  
  38. {  
  39.     std::vector<Test> vecTest;  
  40.     MyPushback(vecTest,9,1);  
  41.     MyPushback(vecTest,8,2);  
  42.     MyPushback(vecTest,7,3);  
  43.     MyPushback(vecTest,6,4);  
  44.     MyPushback(vecTest,5,5);  
  45.     MyPushback(vecTest,4,6);  
  46.     MyPushback(vecTest,3,7);  
  47.     MyPushback(vecTest,2,8);  
  48.     MyPushback(vecTest,1,9);  
  49.     //排序之前
  50.     std::cout<<"Before Sort:"<<std::endl;  
  51.     PrintVector(vecTest);  
  52.     std::cout<<"對向量中的所有元素按member1進行升序排列:"<<std::endl;  
  53.     std::sort(vecTest.begin(),vecTest.end(),SortByM1);  
  54.     PrintVector(vecTest);  
  55.     //std::cout<<"對向量中的第2個到第5個元素按member1進行升序排列:"<<std::endl;
  56.     //std::sort(vecTest.begin()+1,vecTest.begin()+5,SortByM1);//vecTest.begin()+5為第6個位置
  57.     //PrintVector(vecTest);
  58.     return 0;  
  59. }  


相關推薦

C++標準 std::sort vector排序

前天要做一個對C++ STL的vector容器做一個排序操作,之前一直把vector當做一個容量可自動變化的陣列,是的,陣列,所以打算按照對陣列進行排序的方法:用快速排序或是氣泡排序等演算法自己寫一個排序的函式。後來覺得STL這麼強大,應該有它自己的排序方法(沒有好好學習

C標準中的快速排序(quick-sort)函式 [簡單應用]

#include <iostream> #include <cstdlib> using namespace std; const size_t INDEX_ZERO = 0; int com(const void *a,const void *

C++ 標準類型vector

nbsp () under iter ++ 叠代器類型 指針 vector 頭文件   vector 為類模板,包含在頭文件vector中。   定義和初始化   vector(T) a;  //元素為T類型,默認初始化   vector(T) b = a;  //用

c++標準裏的sort()排序函數

C++ STL Sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間復雜度為n*log2(n),執行效率較高!一,sort()排序函數的使用方法I)Sort函數包含在頭文件為#in

C++標準排序函式sort的用法

(一)為什麼要用c++標準庫裡的排序函式 Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n),執行效率較高! (二)c++標準庫裡的排序函式的使用方法 I)S

C++標準vector類型的使用和操作總結

種類 style 開始 spa log string string類 gpo targe   vector是一種類型對象的集合,它是一種順序容器,容器中的所有對象必須都是同一種類型。vector的對象是可以動態生長的,這說明它在初始化時可以不用指定大小,而是再使用時根據元素

c/c++ 標準 vector

font 編譯不過 class for 標準庫 size_type end auto 試用 c/c++ 標準庫 vector 標準庫 vector的小例子 test1~test7 #include <iostream> #include <vector&g

C++標準vector及迭代器【轉】

(轉自:https://blog.csdn.net/zhy_cheng/article/details/8041940?utm_source=blogxgwz46) vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。

C++深度解析 初探C++標準 --- cin,cout,std(31)

C++深度解析 初探C++標準庫 --- cin,cout,std(31)       過載左移操作符 示例程式: #include <stdio.h> const char endl = '\n'; class Console

C++ 標準 vector型別

C++ 標準庫 vector 型別 1,vector物件的定義和初始化 vector是一個類似於動態陣列的型別,對於vector的初始化,如下: vector<int> v1;//儲存in

C++17標準std::any

定義在any標頭檔案中:#include <any> 是一個可用於任何型別單個值的型別安全的容器. 使用方法 #include <any> #include <iostream> int main() { // 儲存任意型別的單個值 // 成

C++標準---vector使用注意事項

使用vector需要注意的地方 1.vector支援隨機存取,因此你只要知道元素的位置,可以在常數時間記憶體取任何一個元素; 2.在末端附加或刪除元素,vector的效能相當好,但是在前端或中部安插或刪除元素,效能就不行了,因為操作點之後的每一個元素都必須向後移動,而每一次

使用C++標準sort自定義比較函式導致死迴圈問題

永遠讓比較函式對相等的值返回false(來自Effective C++) -------------------------------------------------------------------------------------------------

C++標準vector及迭代器

vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。引入標頭檔案 #include<vector> 1.vector物件的定義和初始化 vector<T> v1  

[C/C++標準]_[初級]_[如何實現std::string自己的Format(sprintf)函式]

場景:1.  C語言有自己的sprintf函式,但是這個函式有個缺點,就是不知道需要建立多大的buffer, 這時候可以使用snprintf函式來計算大小,只要引數 buffer為NULL, count為0即可.2.  這裡實現std::string自己的sprintf也是用

C++標準vector使用(更新中...)

內存 template class clas cto NPU size_type 移動 oca 內容: vector()  //構造函數 1.vector構造函數 default (1) explicit vector (const all

C標準pow函數精度問題。

一般來說 nbsp any pre 4.5 logs urn padding signed #include <stdio.h> int main () { int temp,i; double a=2.4568; unsigned char b[5]

3.3 標準類型 vector

spa 類型 urn cin string類 標準庫 vector對象 span 限制 #include<iostream> #include<vector> #include<string> using std::cout; usi

C標準stdlib.h概況

庫函數 字符常量 函數返回 表示 size_t 字節 max size 字符集 庫變量 size_t 這是無符號整數類型,它是 sizeof 關鍵字的結果 wchar_t 這是一個寬字符常量大小的整數類型。 div_t 這是 div 函數返回的結構 ldiv_t 這

C++標準算法

fill acc bsp c++ count nbsp size count() style 一、只讀算法 1. find() 2. count() 3. accumulate 4. equal 二、寫入算法 1. fill 2. fill_nC++標準庫算法