Подпись функции сравнения std::min_element
должна быть эквивалентна следующей.Вот причина, по которой вы получаете ошибку компиляции:
bool cmp(const Type1 &a, const Type2 &b);
Поскольку operator<
перегружен для std::string
для сравнения лексикографически, вы можете получить желаемый результат, отсортировав names
с компаратором по умолчанию, а затем поиск первого элемента с длиной больше 1 следующим образом:
Live DEMO
std::vector<std::string> names{"Jason", "Peter", "A", "Ac", "O"};
std::sort(names.begin(), names.end());
const auto it = std::find_if(
names.cbegin(), names.cend(),
[](const std::string& str){return str.size() > 1;});
if(it != names.cend()){
std::cout << *it << std::endl;
}
Если вы хотите сохранить исходный вектор names
, скопируйте его перед сортировкой или используйте std::set
следующим образом:
Live DEMO (std :: set)
std::vector<std::string> names{"Jason", "Peter", "A", "Ac", "O"};
std::set<std::string> s(names.cbegin(), names.cend());
const auto it = std::find_if(
s.cbegin(), s.cend(),
[](const std::string& str){return str.size() > 1;});
if(it != s.cend()){
std::cout << *it << std::endl;
}