std::sort()

原文地址:http://blog.csdn.net/factor2000/article/details/3936195 ios

 1 #include "stdafx.h" 
 2 #include <vector> 
 3 #include <algorithm> 
 4 #include <functional> 
 5 #include <iostream> 
 6 
 7 using namespace std; 
 8 
 9 //Return whether first element is greater than the second 
10 bool UDgreater(int elem1,int elem2) 
11 { 
12 return elem1 > elem2; 
13 } 
14 class Csort 
15 { 
16 public: 
17 //Return whether first element is less than the second 
18 bool operator () (int a,int b) const 
19 { 
20 return a<b; 
21 }; 
22 }; 
23 
24 int _tmain(int argc, _TCHAR* argv[]) 
25 { 
26 vector<int> v1; 
27 vector<int> ::iterator Iter1; 
28 int arr[12]; 
29 int i; 
30 for (i = 0;i<=5;i++) 
31 { 
32 v1.push_back(2*i); 
33 arr[i]= 2*i; 
34 } 
35 for (i = 6;i<=11;i++) 
36 { 
37 arr[i] = 23 - 2*i; 
38 } 
39 
40 int ii; 
41 for (ii = 0; ii<=5;ii++) 
42 { 
43 v1.push_back(2 * ii + 1); 
44 } 
45 cout <<"Original vector v1 = ("; 
46 for(Iter1 = v1.begin();Iter1 != v1.end();Iter1++) 
47 cout << *Iter1<<","; 
48 cout<<")"<< endl; 
49 cout <<"Original array arr = ("; 
50 for (int n = 0;n<12;n++) 
51 cout << arr[n]<<","; 
52 cout << ")"<< endl; 
53 
54 //std::sort 默認排序方式 
55 sort(v1.begin(),v1.end()); 
56 cout<<"Sorted vector v1 = ("; 
57 for(Iter1 = v1.begin();Iter1 != v1.end();Iter1++) 
58 cout << *Iter1 <<","; 
59 cout<<")"<<endl; 
60 
61 
62 //使用自定義函數給數組排序,第三個參數爲函數指針UDgreater 
63 //第二個自定義參數爲數據最大地址的後一位指針&arr[12]; 
64 sort(&arr[0],&arr[12],UDgreater); 
65 
66 cout<<"Resorted(UDgreater) array arr = ("; 
67 for(int n =0;n<12;n++) 
68 cout << arr[n]<<","; 
69 cout << ")"<<endl; 
70 
71 //使用<functional>庫中 greater<int>()給向量v1排序; 
72 sort(v1.begin(),v1.end(),greater<int>()); 
73 //sort(v1.begin(),v1.end().Csort()); 
74 
75 cout << "Resorted (greater) vector v1 = ("; 
76 for(Iter1 = v1.begin();Iter1 != v1.end();Iter1++) 
77 cout << *Iter1 <<","; 
78 cout << ")" << endl; 
79 
80 //A user - defined (UD) binary predicate can also be used 
81 //sort (v1.begin(),v1.end(),UDgreater); 
82 sort(v1.begin(),v1.end(),Csort()); 
83 cout << "Resorted (Csort) vector v1 = ("; 
84 for(Iter1 = v1.begin();Iter1!= v1.end();Iter1++) 
85 cout << *Iter1 << ","; 
86 cout << ")" <<endl; 
87 
88 system("Pause"); 
89 //getchar(); 
90 return 0; 
91 } 
std::sort(vec.begin(),vec.end(),Func);
error C2780: 「void std::sort(_RanIt,_RanIt)」: 應輸入 2 個參數,卻提供了 3 個
解決方案:Func是一個class的成員函數,在class其定義處將其改成靜態函數便可。	 
	  如 static bool Func(const Type& t1,const Type& t2);
本站公眾號
   歡迎關注本站公眾號,獲取更多信息