Mam takie wartości:
set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
set(['4.918859000', '0.060758000', '4.917336999', '0.003949999', '0.013945000', '10.281522000', '0.025082999'])
Chcę posortować wartości w set
porządku rosnącym. Nie chcę sortować między zestawami, ale wartości w każdym zestawie.
list
.std::set
jest uporządkowany.Odpowiedzi:
Z komentarza:
To łatwe. Dla dowolnego zestawu
s
(lub czegokolwiek innego iterowalnego)sorted(s)
zwraca listę elementóws
w posortowanej kolejności:Zauważ, że
sorted
daje ci tolist
, a nieset
. Dzieje się tak, ponieważ cały zbiór, zarówno w matematyce , jak iw prawie każdym języku programowania *, polega na tym, że nie jest on uporządkowany: zbiory{1, 2}
i{2, 1}
są tym samym zestawem.Prawdopodobnie nie chcesz sortować tych elementów jako ciągów, ale jako liczby (więc 4.918560000 pojawi się przed 10.277200999, a nie po).
Najlepszym rozwiązaniem jest przede wszystkim przechowywanie liczb w postaci liczb, a nie łańcuchów. Ale jeśli nie, wystarczy użyć
key
funkcji:Aby uzyskać więcej informacji, zobacz Sorting HOWTO w oficjalnej dokumentacji.
* Zobacz komentarze dotyczące wyjątków.
źródło
set
oznacza to „posortowaną listę”, a trzeba powiedzieć,unordered_set
że oznacza „ustaw”…std::set
nie narażać Zamawianie (nie tylko w oczywistych sposobów poprzez API; funkcja zamawiania jest faktycznie częścią typu w danym zestawie). Fakt, że elementy są zawsze sortowane według ściśle określonej, słabej kolejności, jest częścią samej definicji pojęcia. Więc twój argument jest dyskusyjny. Ale nawet gdyby nie było, dlaczego miałoby to mieć znaczenie? Zestawy są nieuporządkowane w prawie każdym języku programowania, tak jak w matematyce. Fakt, że istnieje jeden odległy język, w którym to słowo oznacza coś innego, nie czyni tego stwierdzenia mniej prawdziwym.