北大,STL簡單整理 sort 二分搜尋

2021-08-10 22:59:22 字數 2628 閱讀 6823

greater包含在中,用了他,可以使sort從大到小排序。

藍色部分都是可以替換的,黑色不能替換,結構名隨便取,t就是具體的型別

到時候,就會呼叫這個函式,把要比較的兩個元素傳進來。

#include #include #include using namespace std;

struct rule1

};struct rule2

};bool cmp(int a,int b)

int main()

; sort(a,a+3,greater());

for (int i = 0;i < 6;i ++)

printf("%d",a[i]);

printf("\n---------------\n");

sort(a,a+3,cmp);

for (int i = 0;i < 6;i ++)

printf("%d",a[i]);

printf("\n---------------\n");

sort(a,a+3,rule1());

for (int i = 0;i < 6;i ++)

printf("%d",a[i]);

printf("\n---------------\n");

sort(a,a+3,rule2());

for (int i = 0;i < 6;i ++)

printf("%d",a[i]);

printf("\n---------------\n");

return 0;

}

現已有的三種排序  &符號不要忘了,忘了也沒事,有了效率更高。

字串的排序。

const int & s1
cmp中也是可以這樣定義的。

這個等於的符號也特別的標註出來。

自定義的排序時,查詢的函式應該與排序的函式相等。

得證,兩種寫法完全通用的。

找到的值是大於等於

#include #include #include #define num 7

using namespace std;

struct rule

};void print(int a,int size)

cout << endl;

}int main()

; sort (a,a+num);

print(a,num); // => 3,5,5,7,12,21,98

int *p = lower_bound(a,a+num,5);

cout << *p << "," << p-a << endl; //=> 5,1

p = upper_bound(a,a+num,5);

cout << *p << endl; // => 7

cout << * upper_bound(a,a+num,13) << endl; //=>21;

// 指標的作用還是很厲害的,可以表示座標,還可以直接讀值

}

stl的sort函式與二分查詢

1.要使用標頭檔案 include和using namespace std 2.對基本型別陣列排序 sort 陣列名 n1,陣列名 n2 對下標範圍 n1,n2 的元素從小到大排序,下標為n2的元素不在排序區間內 sort 陣列名 n1,陣列名 n2,greater t為陣列的型別int doubl...

stl 二分查詢

在stl中對二分查詢進行了封裝,有兩種 upper bound,lower bound。例如 pos lower bound a,a n,value 查詢value值在長度為n的陣列a中的位置 關於返回值,函式lower bound 在first和last中的前閉後開區間進行二分查詢,返回大於或等於...

STL 二分查詢

實現原始碼 1.在乙個遞增的陣列 或vector 中查詢元素屬於 s e 的下標 2.查詢遞增陣列中元素是否存在 使用binary search 注 對於結構體,要麼過載小於符號 bool operator 要麼定義有小於符號含義的cmp函式。3.應用在遞減序列中 include include i...