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這段程式重點是,把學生當成乙個結構體,然後存貯在vector中,用name.c_str()來進行名字的存貯,比較大小的演算法也需要自己完善#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}
不過有時候乙個排序條件不夠,比如要求學生按分數從高到低排序,如果分數相同,則按照年齡從大到小排序
就需要在comp自定義函式裡面修改一下判斷了,原來是直接return a.score < b.score
現在就需要判斷
if (a.score > b.score)set集合return true;
else if (a.score == b.score && a.age > b.age)
return true;
else
return false;
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...