Saya memiliki nilai seperti ini:
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'])
Saya ingin mengurutkan nilai di masing-masing set
dalam urutan yang meningkat. Saya tidak ingin menyortir di antara set, tetapi nilai di setiap set.
list
.std::set
sudah dipesan.Jawaban:
Dari komentar:
Itu mudah. Untuk set
s
apa pun (atau apa pun yang dapat diulang),sorted(s)
kembalikan daftar elemens
dalam urutan yang diurutkan:Perhatikan bahwa
sorted
memberi Anda alist
, bukanset
. Itu karena inti dari sebuah himpunan, baik dalam matematika dan di hampir setiap bahasa pemrograman , * adalah bahwa ia tidak berurutan: himpunan{1, 2}
dan{2, 1}
merupakan himpunan yang sama.Anda mungkin tidak benar-benar ingin mengurutkan elemen tersebut sebagai string, tetapi sebagai angka (jadi 4.918560000 akan muncul sebelum 10.277200999 daripada setelahnya).
Solusi terbaik kemungkinan besar adalah menyimpan angka sebagai angka daripada string. Tetapi jika tidak, Anda hanya perlu menggunakan sebuah
key
fungsi:Untuk informasi lebih lanjut, lihat Sorting HOWTO di dokumen resmi.
* Lihat komentar untuk pengecualian.
sumber
set
berarti "daftar yang diurutkan", dan Anda harus mengatakan ituunordered_set
berarti "set"…std::set
tidak mengekspos pemesanan (bukan hanya dalam cara yang jelas melalui API; fungsi pemesanan sebenarnya bagian dari jenis apapun himpunan). Fakta bahwa elemen-elemen tersebut selalu disimpan dengan urutan yang sangat lemah adalah bagian dari definisi konsep itu sendiri. Jadi, argumen Anda bisa diperdebatkan. Tetapi bahkan jika tidak, mengapa itu penting? Himpunan tidak berurutan di hampir setiap bahasa pemrograman, seperti halnya dalam matematika. Fakta bahwa ada satu bahasa terpencil yang menggunakan kata itu untuk mengartikan sesuatu yang lain tidak membuat pernyataan itu menjadi kurang benar.