關於c 中vector和set使用sort方法

2021-08-18 23:13:52 字數 2580 閱讀 6059

1.vector,set,map這些容器的end()取出來的值實際上並不是最後乙個值,而end的前乙個才是最後乙個值!

需要用prev(***.end()),才能取出容器中最後乙個元素。

2.對vector使用sort函式:

第一種情形:基本型別,如vector,vector,vector也是可以的

//

cout <<" a.end()"<< *a.end() << endl; 執行這句話會報錯!

14cout <<

"prev(a.end)

"<< *prev(a.end()) <<

endl;

15sort(a.begin(), a.end());

16for

(vector<

int>::iterator it = a.begin(); it != a.end(); it++

)

第二種情形:用自定義的結構體進行sort演算法,

這時候需要自己定義個比較函式,因為sort演算法是基於容器中的元素是可以兩兩比較的,然後從小到大排序,所以要自定義怎麼樣才是小於('<')

舉例如下:

我們有n個學生,每個學生都有名字,學號和成績,我們希望輸入學生名字和成績之後,會按照成績高低進行排序

1

#include

2#include

3#include<

set>

4#include<

string

>

5#include

6using

namespace

std;

7struct

student;

11//

自定義「小於」

12bool comp(const student &a, const student &b)

15int

main()

27cout <<

"**********=排序前***************=

"<<

endl;

28for

(vector::iterator it = vectorstudents.begin(); it != vectorstudents.end(); it++)31

sort(vectorstudents.begin(),vectorstudents.end(),comp);

32cout <<

"**********=排序後***************=

"<<

endl;

33for

(vector::iterator it = vectorstudents.begin(); it != vectorstudents.end(); it++)36

return0;

37}

這段程式重點是,把學生當成乙個結構體,然後存貯在vector中,用name.c_str()來進行名字的存貯,比較大小的演算法也需要自己完善

不過有時候乙個排序條件不夠,比如要求學生按分數從高到低排序,如果分數相同,則按照年齡從大到小排序

就需要在comp自定義函式裡面修改一下判斷了,原來是直接return a.score < b.score

現在就需要判斷

if (a.score > b.score)

return true;

else if (a.score == b.score && a.age > b.age)

return true;

else

return false;

set集合

et是乙個集合,內部的元素不會重複,同時它會自動進行排序,也是從小到大

而且set的insert方法沒有insert(a,cmp)這種過載,所以如果要把結構體插入set中,我們就要過載'<'運算子。

set方法在插入的時候也是從小到大的,那麼我們過載一下《運算子讓它從大到小排序

//自定義「小於」12boolcomp(conststudent &a,conststudent &b)

15booloperator<

(conststudent & stu1,conststudent &stu2)

C 中vector和set簡單用法

include include includeusing namespace std int main name1.insert name1.begin 1,1 將1插入到name1 1 的位置 vector iterator it2 name1.begin 4 name1.erase it2 刪除...

關於C 中get和set

在程式中經常碰到get set,不甚明白,在網上查詢時也說的迷迷糊糊,所以整理下,以學的明白透徹點。有兩個類person public class person public class person 第乙個型別的name屬性未封裝,其name屬性直接通過public關鍵字暴露給系統中的其他類了,而...

C 中vector和set刪除一億個數字中的奇數

先貼 再解釋 include include include include using namespace std const unsigned int num 100000000 void removeodd1 vector a else bool isodd unsigned int x el...