@keddad
Ученик

Почему lower_bound не видит operator, хотя он определен?

У меня есть такой отрывок кода:
bool operator<(const char l, const string& h) {
    return l < h[0];
}

template <typename RandomIt>
pair<RandomIt, RandomIt> FindStartsWith(
    RandomIt range_begin, RandomIt range_end,
    char prefix)
{
    auto left = lower_bound(range_begin, range_end, prefix);
    auto right = upper_bound(range_begin, range_end, prefix);
    return {left, right};
}


Несмотря на то, что operator< для чара и строки явно определен, я все равно получаю ошибку при компиляции:
no match for ‘operator<’ (operand types are ‘const char’ and ‘const std::__cxx11::basic_string<char>’)

ЧЯДНТ?
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
operator< ищется через ADL. Нельзя определить оператор для чужих типов, и чтобы его подхватили алгоритмы. Предлагаю такое решение: вместо char искать свою структуру (её можно определить просто как struct с char), для которой определить сравнение так же, как ты это сделал с char.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы