Предположим, я хочу использовать зЬй :: LOWER_BOUND на станд :: вектор указателей, как это:повышение :: связать или повышение :: лямбда на станд :: LOWER_BOUND
struct X {
int x;
double y;
};
// overloads for normal comparisons
bool operator< (int left, const X& right) { return left < right.x; }
bool operator< (const X& left, int right) { return left.x < right; }
std::vector<X*> v;
int searchValue = 5;
std::vector<X*>::iterator it = std::lower_bound(v.begin(), v.end(), searchValue,
? // what the heck do I put here?
);
ли я использовать повышение :: bind или boost :: lambda здесь, и если да, то как?
Я думаю, что бы это было бы так:
std::lower_bound(v.begin(), v.end(), searchValue, searchValue < *_1);
Однако я получаю недопустимую ошибку разыменования на этом.
Boost.Lambda официально осуждается с момента выхода [Boost.Phoenix] (http://www.boost.org/libs/phoenix/) v3, поэтому _real_ ответ использовать Boost.Phoenix. I.e., код, который у вас хорошо работает с Boost.Phoenix без каких-либо изменений (за исключением того, что аргументы вашего 'operator <' обращаются назад). – ildjarn
Обычно я бы сказал 'std :: less()', но вы сравниваете 'int' с' X', чтобы это не сработало. –
Flexo
К сожалению, я все еще на boost 1.43, поэтому Boost.Phoenix недоступен :( – syvex