Есть необходимость найти в массиве строк диапазон строк, которые начинаются на определенную букву. Так как по умолчанию 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, я взял что попроще :)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости