Chciałem wiedzieć, w jaki sposób mogę posortować wektor łańcuchowy w taki sposób, aby ciąg z najmniejszą liczbą znaków był umieszczony na wierzchołku wektora. Na przykład, jeśli wektor ma ABCD, ABCDE, ABC w nim. ABC jest na szczycie. Chciałbym wiedzieć, jak można to osiągnąć dzięki sort_if i jak powinien wyglądać predykat? Wszelkie inne metody są również mile widzianesortowanie wektora ciągowego na podstawie rozmiaru ciągu znaków
Odpowiedz
Zrób swój własny funktor porównania wielkości łańcucha (-ów) i użyć jej do sortuj struny.
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);
Prawdopodobnie chcesz zamówić łańcuchy leksykograficzne, jeśli mają one tę samą długość. Operator wywołania funkcji powinien być prawdopodobnie "const". –
Nie musisz robić funktora, aby to zrobić. Prosta funkcja porównania również to zrobi. –
@ DietmarKühl Myślę, że chcesz być stabilny, jeśli mają taką samą długość. Zgadnij, to zależy od pytającego. – BoBTFish
Powinny być w stanie korzystać z regularnych std::sort(first, last, compare)
i porównać funkcję tak:
bool compareLen(const std::string& a, const std::string& b)
{
return (a.size() < b.size());
}
std::sort
pobiera opcjonalny argument dla porównania niestandardowego
template< class RandomIt, class Compare >
void sort(RandomIt first, RandomIt last, Compare comp);
Wystarczy zdefiniować funkcję, która porównuje na podstawie długości.
- 1. Filtrowanie ciągu znaków na podstawie liczby słów
- 2. Zwróć ciąg znaków w ciągu znaków na podstawie wyrażenia 'x = {(. *)}'
- 3. Przytnij ciąg znaków na podstawie długości ciągu znaków
- 4. Przesyłanie ciągu znaków do wektora obiektów
- 5. Sortowanie pojedynczego ciągu znaków w języku Java
- 6. Podział ciągu na podstawie powtórzeń
- 7. Sortowanie wektora wskaźników
- 8. Sortowanie tablicy na podstawie alfabetów?
- 9. Generowanie losowego ciągu znaków na podstawie wyrażenia regularnego
- 10. Sortowanie w ArrayList według rozmiaru
- 11. Wybieranie kolumn macierzy na podstawie wektora binarnego
- 12. Datatrigger na pustym ciągu znaków
- 13. C++: podział ciągu znaków na tablicę
- 14. Znajdź pierwsze wystąpienie ciągu znaków z wektora <string>
- 15. Sortowanie plików Div w Jquery Na podstawie atrybutu "sortowanie danych"?
- 16. Sortowanie kolekcji na podstawie innej kolekcji
- 17. Sortowanie boxów na podstawie wartości medianowej
- 18. Scala - sortowanie na podstawie predykatu wyników Future
- 19. Sortowanie listy na podstawie innej listy
- 20. Sortowanie macierzy numpy na podstawie jej przekątnej
- 21. php: sortowanie i liczenie wystąpień słów w danym ciągu znaków
- 22. Formatowanie ciągu znaków na 10 znaków
- 23. jQuery - wykonywanie skryptów na podstawie rozmiaru ekranu
- 24. Przełączanie klas CSS na podstawie rozmiaru ekranu
- 25. zmiana rozmiaru QMainWindow na podstawie widgetu podrzędnego?
- 26. Zastępowanie znaków w ciągu znaków na podstawie wierszy w tabeli sql
- 27. Podział ciągu na ciąg znaków
- 28. Jaki jest limit rozmiaru zmiennej PHP podczas przechowywania ciągu znaków?
- 29. Uzyskiwanie rozmiaru ems ciągu znaków w systemie Android
- 30. Najbardziej elegancki sposób na usunięcie elementu ciągowego
Nie jest to 'std :: sort_if()'. Istnieje przeciążenie predykatu 'std :: sort()' taking. Predykat oczywiście porównałby długość argumentów i jeśli są one równe, porównują kolejność leksykograficzną łańcuchów; w przeciwnym razie zwracałoby wartość "prawda", jeśli pierwszy argument jest krótszy. –
FYI - te odpowiedzi są teraz bardzo nieaktualne, nie trzeba już przeciążać operatora, wystarczy użyć lambda! –