У меня такие ценности:
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'])
Я хочу отсортировать значения в каждом set
в порядке возрастания. Я хочу сортировать не между наборами, а значения в каждом наборе.
list
.std::set
заказан.Ответы:
Из комментария:
Это легко. Для любого набора
s
(или чего-либо еще итеративного)sorted(s)
возвращает список элементовs
в отсортированном порядке:Обратите внимание, что
sorted
это дает вам alist
, а не aset
. Это потому, что весь смысл множества, как в математике, так и почти во всех языках программирования , * состоит в том, что он не упорядочен: множества{1, 2}
и{2, 1}
являются одним и тем же множеством.Вероятно, вы действительно хотите сортировать эти элементы не как строки, а как числа (так что 4.918560000 будет до 10.277200999, а не после).
Лучшее решение, скорее всего, состоит в том, чтобы хранить числа как числа, а не как строки. Но если нет, вам просто нужно использовать
key
функцию:Для получения дополнительной информации см. Sorting HOWTO в официальной документации.
* См. Комментарии для исключений.
источник
set
означает «отсортированный список», и вы должны сказать,unordered_set
чтобы иметь в виду «набор»…std::set
это выставить порядок ( а не только в очевидных путей через API, функция упорядочения фактически частью типа любого заданного набора). Тот факт, что элементы всегда отсортированы в строгом слабом порядке, является частью самого определения концепции. Итак, ваш аргумент спорный. Но даже если это не так, какое это имеет значение? Почти во всех языках программирования наборы неупорядочены, как и в математике. Тот факт, что есть один отдаленный язык, который использует это слово для обозначения чего-то еще, не делает это утверждение менее верным.