Вам нужно передать тип лямбды в качестве аргумента шаблона, а не саму лямбду.То, что вы хотите, это:
auto mycomp = [](const int&a, const int& b) { return a < b; };
std::map<int, int, decltype(mycomp)> test(mycomp);
Хотя на самом деле, поскольку ваша лямбда не имеет перехватов, она на самом деле может быть сохранена в указателе функции, поэтому в качестве альтернативы вы можете сделать это:
Хотя я нахожу первое гораздо более читабельным.Хотя использование указателя на функцию типа является более универсальным.т.е. он может принимать любой указатель на функцию или лямбда без захвата, соответствующую этой сигнатуре.Но если вы измените свою лямбду для захвата, она не будет работать.Для более универсальной версии вы можете использовать std::function
, то есть:
std::map<int, int, std::function<bool(const int&, const int&)>>
, который будет работать с любой функцией, лямбда-выражением (захват или нет) или функциональным объектом, если сигнатура совпадает.*