Есть необходимость найти в массиве строк диапазон строк, которые начинаются на определенную букву. Так как по умолчанию 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
, я взял что попроще :)
Есть много утилит для всяких исследований кодаПрочитал несколько мнений на счёт того что выявление бага кода лучше делать через такие инструменты
Хотя вам подсказали, что вы читаете один файл, а проверяете другой
Хочу сделать загрузку файла по ссылке (пример - http://examplecom/test