Я хотел знать, как я могу сортировать вектор-строку таким образом, чтобы строка с наименьшим количеством символов находилась поверх вектора. Например, если вектор имеет ABCD, ABCDE, ABC в нем. ABC добирается до вершины. Мне было бы интересно узнать, как это может быть достигнуто с помощью sort_if и как будет выглядеть предикат? Любые другие методы также приветствуютсортировка строкового вектора на основе размера строки
ответ
сделать свой собственный функтор для сравнения размера строки (строк) и использовать его для сортировать строки.
struct compare {
bool operator()(const std::string& first, const std::string& second) {
return first.size() < second.size();
}
};
std::vector<std::string> v;
compare c;
std::sort(v.begin(), v.end(), c);
Возможно, вы захотите заказать строки лексикографически, если они имеют одинаковую длину. Оператор вызова функции должен, вероятно, быть 'const'. –
Для этого вам не нужно делать функтор. Простая функция сравнения также сделает это. –
@ DietmarKühl Я думаю, вы просто хотите быть стабильным, если они имеют одинаковую длину. Угадайте, что дело до меня. – BoBTFish
должны быть в состоянии использовать регулярные std::sort(first, last, compare)
и функцию сравнения, как это:
bool compareLen(const std::string& a, const std::string& b)
{
return (a.size() < b.size());
}
std::sort
принимает необязательный аргумент для настраиваемого сравнения
template< class RandomIt, class Compare >
void sort(RandomIt first, RandomIt last, Compare comp);
Вы можете просто определить функцию, которая сравнивает на основе длины.
- 1. Сортировка строкового массива на основе строки соответствия
- 2. Сортировка вектора строки на основе связанного целого вектора
- 3. Сортировка массива на основе размера строки
- 4. подматрица на основе вектора размера
- 5. Сортировка списка на основе строкового футляра
- 6. сортировка вектора определяемых пользователем классов на основе строки внутри класса
- 7. Сортировка вектора на основе значения кортежа
- 8. Сортировка вектора struct на основе определенного поля
- 9. Изменить числа вектора на основе «группового» размера
- 10. Сортировка SQL массив на основе месяцев строкового типа
- 11. Сортировка массивов на основе строки?
- 12. Сортировка на основе строки java
- 13. Сортировка документов на основе размера поля массива
- 14. плотина поиск/сортировка на основе размера файла
- 15. Сортировка на основе перестановок определенного размера
- 16. Определение размера массива на основе размера строки
- 17. сортировка буквенно-цифровой строки с использованием вектора
- 18. Сортировка вектора несколько раз
- 19. Сортировка 2-строкового массива на основе ввода пользователем?
- 20. Сортировка строкового массива на основе массива int без Array.Sort
- 21. Bison ввод из строкового вектора
- 22. R: Сортировка кадра данных на основе порядка вектора?
- 23. Сортировка вектора пара
- 24. сортировка по структуре на основе его первого элемент вектора
- 25. C++ STL: Пользовательский сортировка одного вектора на основе содержимого другого
- 26. Выбор и сортировка строк в кадре данных на основе вектора
- 27. Инициализация массива на основе размера вектора в структуре [C++]
- 28. Сортировка в GWT на основе строки
- 29. Сортировка наборов на основе порядка строки?
- 30. Сортировка DataGridView на основе значения другой строки
Это не 'std :: sort_if()'. Однако существует перегрузка 'std :: sort()' принятия предиката. Предикат, очевидно, сравнивал бы длину аргументов, и если бы они были равны, сравните лексикографический порядок строк; иначе он вернет «истину», если первый аргумент короче. –
FYI - эти ответы сейчас очень устарели, теперь нет необходимости в перегруженном операторе, просто используйте лямбда! –