1 // Generic findMax, with a function object, version #1
2 // Precondition, a.size() > 0
3 #include <iostream>
4 #include <vector>
5 #include <string.h>
6 using namespace std;
7
8 template <class Object, class Comparator>
9 const Object& findMax(const vector<Object> &arr, Comparator cmp)
10 {
11 int maxIndex = 0;
12 for(int i = 1; i < arr.size(); i++) {
13 if(cmp.isLessThan(arr[maxIndex], arr[i]))
14 maxIndex = i;
15 }
16 return arr[maxIndex];
17 }
18
19 #include <functional>
20 template <class Object>
21 const Object& findMax(const vector<Object> &arr)
22 {
23 return findMax(arr, less<Object>() );
24 }
25
26 class CaseInsensitiveCompare {
27 public:
28 bool isLessThan(const string &lhs, const string &rhs) const
29 {return (stricmp(lhs.c_str(), rhs.c_str())< 0); }
30 };
31
32 int main()
33 {
34 vector<string> arr(3);
35 arr[0] = "ZEBRA"; arr[1] = "alligator"; arr[2] = "crocodile";
36 cout << findMax(arr, CaseInsensitiveCompare()) << endl;
37 //cout << findMax(arr) << endl;
38 return 0;
39 }
40
41
42
43
44