Есть необходимость найти в массиве строк диапазон строк, которые начинаются на определенную букву. Так как по умолчанию string
и char
не сравниваются, то пишем соответствующие функции сравнения. Как я понял их нужно две, так как с одной не работает. Вписываю их в структуру и получается что-то вроде:
struct Comp {
bool operator()(const std::string &a, char b) {return a[0] < b;};
bool operator()(char b, const std::string &a) {return b < a[0];};
}
std::equal_range(arr.begin(), arr.end(), pref, Comp{});
Мой вопрос вот в чем: а можно ли вместо этой структуры использовать лямбда-выражение?
Ну вот, например:
int main(int argc, const char * argv[])
{
vector<string> v{"acv","asd","bcd","bsd","bxy","vsd","zxy" };
auto [b,e] = equal_range(v.begin(),v.end(),'b',
[](auto x, auto y)
{
if constexpr (sizeof(x) == 1)
{
return x < y[0];
}
else
{
return x[0] < y;
}
});
for(auto i = b; i != e; ++i)
cout << *i << endl;
}
Можно воспользоваться более серьезной проверкой is_same
, я взял что попроще :)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть много утилит для всяких исследований кодаПрочитал несколько мнений на счёт того что выявление бага кода лучше делать через такие инструменты
Хотя вам подсказали, что вы читаете один файл, а проверяете другой
Хочу сделать загрузку файла по ссылке (пример - http://examplecom/test