Скорость связанной лямбды (через std :: function) против оператора () структуры функтора

auto lam = [](int a, int b, int c) { return a < b && b < c; };

struct functor {
  int a;
  int b;
  bool operator()(int n) const { return a < n && n < b; }
};

В первой версии мы

std::vector<std::function<bool (int)>> lamvals;
// get parameters and for each
lamvals.emplace_back(std::bind(lam, a, std::placeholders::_1, b));

Альтернатива

std::vector<functor> lamvals;
// get parameters and for each
lamvals.emplace_back(functor{a, b});

В обоих случаях у нас есть простая итерация

    return std::any_of(lamvals.cbegin(), lamvals.cend(),
            [n](const decltype(lamvals)::value_type & t){return t(n);});

Я вижу разницу в скорости 3: 1, а связанная лямбда медленнее. Функтор почти так же быстр, как и сохранение целочисленных пар и жесткое кодирование тестов. Очевидно, что жесткое кодирование не так полезно для производственного кода, потому что в игре будет несколько функций, а не только между ними. Однако я могу использовать как много функторов, так и много лямбд. Последний содержит меньше строк кода и выглядит чище, но я не думаю, что могу себе позволить такую ​​разницу в скорости; этот код находится в критическом цикле.

Я ищу предложения по ускорению.

Ответы на вопрос(1)

Ваш ответ на вопрос