STL模板之vector與sort的使用

2021-07-25 06:51:21 字數 2034 閱讀 5180

@(演算法學習)

題目:輸入任意(使用者,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績.都按先錄入排列在前的規則處理。

例示:

jack 70

peter 96

tom 70

smith 67

從高到低 成績

peter 96

jack 70

tom 70

smith 67

從低到高 成績

smith 67

tom 70

jack 70

peter 96

輸入多行,先輸入要排序的人的個數,然後輸入排序方法0(降序)或者1(公升序)再分別輸入他們的名字和成績,以乙個空格隔開

###輸出描述:###

按照指定方式輸出名字和成績,名字和成績之間以乙個空格隔開。

輸入例子:30

fang 90

yang 50

ning 70

輸出例子:

fang 90

ning 70

yang 50

#include

#include

#include

#include

using

namespace std;

typedef

struct node

student;

int bit =0;

//0:降序輸出; 1:公升序輸出

bool

compare

(student a, student b)

else

}else

// bit == 0時

else}}

intmain()

//按照成績排序--公升序

sort

(students.

begin()

,students.

end(

),compare)

;for

(auto it = students.

begin()

; it != students.

end(

); it++)}

return0;

}

分析:基於c++的stl模板,則最關鍵的排序演算法就不用自己動手寫了。什麼快排,堆排等等都作為基礎掌握就好,這裡主要強調直接運用stl的sort函式直接幫我們排好序。

針對一般的vectorins陣列,如果只是存的數字元素,直接sort(ins.begin(),ins.end()),預設是遞增排序。

如果vector存的是自定義的結構體,同樣可以用sort,但是排序規則就需要自己定義了。只用在sort函式後面加上自定義的比較函式名字,注意不是函式呼叫,而是函式名字。即函式作為引數,被呼叫的是外層函式。

這題的具體思路就是定義乙個結構體儲存學生的姓名和成績。定義乙個序號seq是為了跟蹤輸入的次序,也作為排序的乙個引數。

所以,整個邏輯非常清楚,就是處理好輸入資料,呼叫sort,輸出即可。

囉嗦一句,在c中可用:

while

(scanf

("%d"

,&a)

!=eof

)

來進行多個case的處理。

在c++的語法下,上面的也可以用,但是如果用cin流處理,則:

while

(cin >> a)

都表示輸入流非空。很小也很基礎的細節。

關於比較函式,是布林型,如果返回的是false,表示遞增,返回true表示遞減。

即左項減右項。

2019.10 update:

end.

C 模板之Vector與STL初探

stl原始碼初步接觸 stl standard template library,直譯過來是 標準模板庫,是惠普實驗室開發的一系列軟體的統稱。從根本上說,stl是一些 容器 的集合,這些 容器 有list,vector,set,map等,stl也是演算法和其他一些元件的集合。這裡的 容器 和演算法的...

標準模板庫STL之vector

stl vector 用於實現陣列的功能,相當於在陣列的基礎上封裝了一些常用的功能 push back在尾部新增乙個元素 pop back在尾部刪除乙個元素 clear清空所有的元素 at按索引訪問某個位置的元素 front返回頭元素 back返回尾元素 size返回元素的個數 capacity返回...

標準模板庫STL之vector

一 向量vector用於實現陣列的功能 便於訪問,不便於插入刪除 相當於在陣列的基礎上封裝了一些常用的功能。函式功能 功能push back 在尾部新增乙個元素 pop back 在尾部刪除乙個元素 clear 清空所有元素 at按索引訪問某個位置的元素 front 返回頭元素 back 返回尾元素...