2010-10-21 37 views
5

Có cách nào để sắp xếp std :: bản đồ theo dữ liệu thay vì khóa không? Ngay bây giờ mã của tôi sao chép toàn bộ bản đồ vào một mảng chỉ để làm điều này.std :: sắp xếp bản đồ theo dữ liệu?

+1

Bạn có cần một bản đồ khác có khóa/giá trị được đảo ngược không? –

+0

Đã không tìm thấy một giải pháp tốt. Bạn không thể chỉ trao đổi bản đồ xung quanh (như nhiều gợi ý) vì hai giá trị có thể giống nhau, tạo ra một bản đồ mới có thể có ít thành phần hơn. Trên thực tế ** không thể ** sắp xếp bản đồ theo giá trị, vì bản đồ được sắp xếp theo khóa (do đó tại sao nó lại nhanh). Ngay cả khi bạn cố gắng tạo bản đồ mới được sắp xếp, bằng cách đẩy các giá trị giống như vectơ, bạn vẫn sẽ kết thúc với bản đồ được sắp xếp theo khóa! Cách tôi thực hiện vào mã của tôi là tạo các vectơ sắp xếp cho mỗi khóa và giá trị, và sử dụng các vectơ trong ứng dụng của tôi. Để tạo các vectơ, trước hết tôi có thể là – user2544830

+0

Bản sao có thể có của [STL map -> sort by value?] (Http://stackoverflow.com/questions/2699060/stl-map-sort-by-value) –

Trả lời

3

Theo như tôi có thể nhớ, std::map sẽ cung cấp cho bạn trình lặp sẽ duyệt qua các mục được sắp xếp theo khóa. Chỉ có cách để đi qua các mục được sắp xếp theo giá trị và vẫn sử dụng bản đồ, là viết lại toàn bộ bộ sưu tập vào một bản đồ khác, với khóa và giá trị được đảo ngược.

+0

Tôi thấy rằng việc sử dụng một vector đơn giản và đơn giản là tìm kiếm nội dung tốt hơn. – Jookia

+2

Nếu làm như vậy, bạn sẽ mất thông tin cặp khóa-giá trị. –

+0

Tôi chỉ vào câu trả lời của Oli Charlesworth tại http://stackoverflow.com/a/5056797/158371 –

Các vấn đề liên quan