2013-09-16 3 views
9

Я хотел знать, как я могу сортировать вектор-строку таким образом, чтобы строка с наименьшим количеством символов находилась поверх вектора. Например, если вектор имеет ABCD, ABCDE, ABC в нем. ABC добирается до вершины. Мне было бы интересно узнать, как это может быть достигнуто с помощью sort_if и как будет выглядеть предикат? Любые другие методы также приветствуютсортировка строкового вектора на основе размера строки

+0

Это не 'std :: sort_if()'. Однако существует перегрузка 'std :: sort()' принятия предиката. Предикат, очевидно, сравнивал бы длину аргументов, и если бы они были равны, сравните лексикографический порядок строк; иначе он вернет «истину», если первый аргумент короче. –

+0

FYI - эти ответы сейчас очень устарели, теперь нет необходимости в перегруженном операторе, просто используйте лямбда! –

ответ

10

сделать свой собственный функтор для сравнения размера строки (строк) и использовать его для сортировать строки.

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); 
+1

Возможно, вы захотите заказать строки лексикографически, если они имеют одинаковую длину. Оператор вызова функции должен, вероятно, быть 'const'. –

+0

Для этого вам не нужно делать функтор. Простая функция сравнения также сделает это. –

+0

@ DietmarKühl Я думаю, вы просто хотите быть стабильным, если они имеют одинаковую длину. Угадайте, что дело до меня. – BoBTFish

5

должны быть в состоянии использовать регулярные std::sort(first, last, compare) и функцию сравнения, как это:

bool compareLen(const std::string& a, const std::string& b) 
{ 
    return (a.size() < b.size()); 
} 
2

std::sort принимает необязательный аргумент для настраиваемого сравнения

template< class RandomIt, class Compare > 
void sort(RandomIt first, RandomIt last, Compare comp); 

Вы можете просто определить функцию, которая сравнивает на основе длины.

Смежные вопросы