Моя программа иллюстрирует шаблон предиката, который можно использовать в качестве предиката сортировки для создания экземпляров контейнеров STL:
#include <iostream>
#include <set>
#include <iterator>
#include <algorithm>
#include <functional>
#include <string>
using namespace std;
template<typename T, template <typename> class comp = std::less> struct ComparePtr: public binary_function<T const *, T const *, bool> {
bool operator()(T const *lhs, T const *rhs) const {
comp<T> cmp;
return (cmp(*lhs, *rhs));
}
};
int wmain() {
string sa[] = {"Programmer", "Tester", "Manager", "Customer"};
set<string *, ComparePtr<string>> ssp;
for (int i(0) ; i < sizeof sa/sizeof sa[0] ; ++i)
ssp.insert(sa + i);
for_each(ssp.begin(), ssp.end(), [](string *s){ cout << s->c_str() << endl; });
return 0;
}
Пожалуйста, обратите внимание на предикат: правильно ли он написан?Это хорошо, чтобы создать экземпляр comp
?Есть ли способ, позволяющий не создавать экземпляр comp
предиката?