C++標準庫 std::sort vector排序
前天要做一個對C++ STL的vector容器做一個排序操作,之前一直把vector當做一個容量可自動變化的陣列,是的,陣列,所以打算按照對陣列進行排序的方法:用快速排序或是氣泡排序等演算法自己寫一個排序的函式。後來覺得STL這麼強大,應該有它自己的排序方法(沒有好好學習啊),然後就去google了一下,果然有,而且可以自定義排序的函式,太強大了(而且效率應該比我自己寫的要好吧)。
[cpp] view plaincopyprint?-
// VectorSort.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <vector>
- #include <algorithm>
- //先自定義一個結構體
- struct Test {
- int member1;
- int member2;
- };
- //自定義排序函式
- bool SortByM1( const Test &v1, const Test &v2)//注意:本函式的引數的型別一定要與vector中元素的型別一致
- {
-
return v1.member1 < v2.member1;
- }
- void MyPushback(std::vector<Test> & vecTest, constint &m1, constint &m2)
- {
- Test test;
- test.member1 = m1;
- test.member2 = m2;
- vecTest.push_back(test);
- }
- void PrintVector( std::vector<Test> & vec)
- {
- /*
- 插一句,
-
vec.begin()對應的位置是向量的第一個位置,
- vec.end()對應的是vector中的最後的一個元素位置的後面的一個位置(我認為,實際上是一個無效位置)
- 文件上的定義:Returns an iterator referring to the past-the-end element in the vector container.
- */
- for(std::vector<Test>::iterator it = vec.begin() ; it != vec.end() ; it++ )
- {
- std::cout<<it->member1<<'\t'<<it->member2<<std::endl;
- }
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- std::vector<Test> vecTest;
- MyPushback(vecTest,9,1);
- MyPushback(vecTest,8,2);
- MyPushback(vecTest,7,3);
- MyPushback(vecTest,6,4);
- MyPushback(vecTest,5,5);
- MyPushback(vecTest,4,6);
- MyPushback(vecTest,3,7);
- MyPushback(vecTest,2,8);
- MyPushback(vecTest,1,9);
- //排序之前
- std::cout<<"Before Sort:"<<std::endl;
- PrintVector(vecTest);
- std::cout<<"對向量中的所有元素按member1進行升序排列:"<<std::endl;
- std::sort(vecTest.begin(),vecTest.end(),SortByM1);
- PrintVector(vecTest);
- //std::cout<<"對向量中的第2個到第5個元素按member1進行升序排列:"<<std::endl;
- //std::sort(vecTest.begin()+1,vecTest.begin()+5,SortByM1);//vecTest.begin()+5為第6個位置
- //PrintVector(vecTest);
- return 0;
- }
相關推薦
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++標準庫算法