Tôi bắt đầu sử dụng std::multimap
để lưu trữ nhiều giá trị bằng cùng một khóa, nhưng sau đó tôi phát hiện ra rằng nó không giữ thứ tự chèn giữa các giá trị với cùng một khóa. This answer tuyên bố rằng nó có thể được thực hiện với boost::multi_index::multi_index_container
, nhưng không đưa ra ví dụ. Nhìn qua các tài liệu, không có ví dụ về cách sử dụng đó, và tôi không thể làm cho người đứng đầu hoặc đuôi của cách bạn đang sử dụng điều này. Tôi đã mong đợi tài liệu nghèo nàn từ các thư viện tăng ít được sử dụng hơn, nhưng điều này có bánh. Bất cứ ai có thể chỉ cho tôi một hướng dẫn hoặc ví dụ cho thấy nó được sử dụng theo cách tôi muốn, hoặc thậm chí có thể cung cấp một ví dụ cho mình?sử dụng boost multi_index_container để duy trì thứ tự chèn
Trả lời
Bạn có thể đạt được điều này bằng cách sử dụng boost::multi_index
với hai chỉ mục: ordered_non_unique
(cho phép các giá trị có cùng khóa) và random_access
(sẽ giữ thứ tự chèn).
struct some {
long key;
int data;
int more_data;
// etc.
};
typedef multi_index_container<
some,
indexed_by<
random_access<>, // keep insertion order
ordered_non_unique< member<some, long, &some::key> >
>
> some_mic_t;
Hỗ trợ câu trả lời này, từ tài liệu tăng cường: ** Các chỉ số truy cập ngẫu nhiên là các trình tự tự do có thời gian truy cập vị trí không đổi và trình vòng lặp truy cập ngẫu nhiên. Các phần tử trong chỉ mục truy cập ngẫu nhiên theo mặc định được sắp xếp theo thứ tự chèn ** –
Làm thế nào về một
map<int, vector<string> >
hoặc
map<int, list<string> >
@Kirill: Tốt câu trả lời. Tôi nghi ngờ random_access của Boost có thể khá chậm, vì nó sẽ buộc tất cả các chuỗi cho tất cả các phím được duy trì trong một cấu trúc liền kề duy nhất. Trong khi người hỏi chỉ đơn giản muốn thứ tự được giữ nguyên trong tập hợp các giá trị được ánh xạ của mỗi khóa.
'random_access' là một chỉ mục bổ sung. Bạn sử dụng 'ordered_non_unique' để tìm kiếm, sau đó là' random_access' để lặp qua phạm vi kết quả. Nó không chậm. –
(Tôi đã sử dụng multi_index rất nhiều, nhưng không phải ngẫu nhiên_index, vì vậy tôi không quá chắc chắn về bất kỳ điều này) @Kirill: Hai điểm: @rmeador muốn có thể "giữ lại thứ tự chèn giữa các giá trị với cùng một khóa ". Cho một khóa duy nhất, làm thế nào có thể toàn bộ chỉ số ngẫu nhiên được sử dụng để nhanh chóng đạt được điều này? Tôi nghi ngờ rằng cấu trúc tôi đề nghị có thể là cách duy nhất để làm điều này. và Tôi có nghĩa là việc chèn các phần tử mới có thể chậm hơn mức cần thiết vì toàn bộ chỉ mục ngẫu nhiên có thể đã lỗi thời. –
@Kirill: Để làm rõ, một khi order_non_unique đã xác định một phạm vi (chưa phân loại) giá trị tương ứng với một khóa duy nhất, làm thế nào để bạn sau đó (nhanh) sử dụng random_access để sắp xếp tập hợp các giá trị đó? Tập hợp các giá trị đó có thể được trải đều trong một chỉ số random_access lớn. Lặp lại trong phạm vi random_access sẽ không giữ các khóa theo thứ tự. –
- 1. Ruby duy trì thứ tự chèn Hash
- 2. Bộ sưu tập Java duy trì thứ tự chèn
- 3. Bản đồ (bộ sưu tập) duy trì Thứ tự chèn trong java
- 4. Bộ sưu tập khóa/giá trị duy trì thứ tự
- 5. Sẽ std :: multimap duy trì thứ tự chèn nếu khóa của 2 yếu tố bằng nhau?
- 6. Làm cách nào để duy trì thứ tự các khóa tôi thêm vào một băm Perl?
- 7. Do dicts có duy trì thứ tự lặp lại nếu chúng không được sửa đổi không?
- 8. Làm thế nào để duy trì thứ tự các mục được thêm vào bộ khớp jQuery?
- 9. Làm cách nào để hợp nhất và duy trì thứ tự hàng của một đầu vào?
- 10. Bcp có duy trì thứ tự hàng trong khi xuất thành tệp dữ liệu không?
- 11. cách thay đổi khóa trong một mảng trong khi vẫn duy trì thứ tự?
- 12. Có cấu trúc dữ liệu không cho phép trùng lặp và cũng duy trì thứ tự nhập không?
- 13. LinkedHashMap của Java có duy trì thứ tự các khóa không?
- 14. Làm thế nào để duy trì một bảng có thứ tự với Dữ liệu cốt lõi (hoặc SQL) với chèn/xóa?
- 15. Duy trì tỷ lệ biểu đồ sử dụng lưới.arrange
- 16. Sử dụng jQuery để chèn động vào danh sách theo thứ tự abc
- 17. Doxygen, quá nặng để duy trì?
- 18. Duy trì cookie jQuery
- 19. Làm thế nào để duy trì thứ tự mảng JSON với các đối tượng được quản lý Restkit
- 20. Có cách nào để buộc cmdlet powershell -Export-CSV duy trì thứ tự cột cụ thể không?
- 21. Thứ tự chèn và truy tìm ArrayList
- 22. Thực hiện java.util.Map sử dụng để chèn như trật tự
- 23. C + 11 Vùng chứa liên kết giữ thứ tự chèn?
- 24. C++ bản đồ băm riêng giữ gìn trật tự chèn
- 25. duy trì các tệp web.config
- 26. Cách duy trì lịch sử công việc bằng cách sử dụng Lịch hẹn Quartz
- 27. Tôi có thể duy trì thứ tự hiển thị trong UITableView bằng cách sử dụng Dữ liệu lõi như thế nào?
- 28. mysql trì hoãn chèn timestamp
- 29. Cách duy trì phiên trong ứng dụng REST
- 30. Làm thế nào để duy trì tính minh bạch png?
Bạn có cần đây là bản đồ đa không? – doublep
vâng, tôi có. Tôi có nhiều giá trị với cùng một khóa. – rmeador