1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#include <algorithm>
#include <string>
#include <iostream>
#include <functional>
using namespace std;
int main()
{
string sarr[] =
{
"alpha", "bravo", "charley", "delta", "echo",
"foxtrot", "golf", "hotel"
};
string *last = sarr + sizeof(sarr) / sizeof(string);
bool result = binary_search(sarr, last, "foxtrot");
cout << (result ? "found " : "didn't find ") << "foxtrot" << '\n';
reverse(sarr, last); // reverse the order of elements
// binary search now fails:
result = binary_search(sarr, last, "foxtrot");
cout << (result ? "found " : "didn't find ") << "foxtrot" << '\n';
// ok when using appropriate
// comparator:
result = binary_search(sarr, last, "foxtrot", greater<string>());
cout << (result ? "found " : "didn't find ") << "foxtrot" << '\n';
// alternatively, using a lambda expression showing the used 'sarr'
// indices and the value of the second parameter:
result = binary_search(sarr, last, "foxtrot",
[&](string const &sarrEl, string const &value)
{
cout << "comparing element " << (&sarrEl - sarr) <<
" (" << sarrEl << ") to " << value << '\n';
return sarrEl > value;
}
);
cout << "found it: " << result << '\n';
}
// Displays:
// found foxtrot
// didn't find foxtrot
// found foxtrot
// comparing element 4 (delta) to foxtrot
// comparing element 2 (foxtrot) to foxtrot
// comparing element 1 (golf) to foxtrot
// comparing element -3 (foxtrot) to foxtrot
// found it: 1
|