@(演算法學習)
題目:輸入任意(使用者,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績.都按先錄入排列在前的規則處理。
例示:jack 70
peter 96
tom 70
smith 67
從高到低 成績輸入多行,先輸入要排序的人的個數,然後輸入排序方法0(降序)或者1(公升序)再分別輸入他們的名字和成績,以乙個空格隔開peter 96
jack 70
tom 70
smith 67
從低到高 成績
smith 67
tom 70
jack 70
peter 96
###輸出描述:###
按照指定方式輸出名字和成績,名字和成績之間以乙個空格隔開。
輸入例子:30fang 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 返回尾元素...