Hãy nói rằng tôi có một bộ sưu tập của các đối tượng Person, mỗi trong số đó trông như thế này:Vùng chứa STL nào cho dữ liệu đặt hàng có quyền truy cập dựa trên khóa?
class Person
{
string Name;
string UniqueID;
}
Bây giờ, các đối tượng phải được lưu trữ trong một container cho phép tôi ra lệnh cho họ để tôi có thể đưa ra mục X một cách dễ dàng xác định vị trí mục X + 1 và X-1.
Tuy nhiên, tôi cũng cần truy cập nhanh dựa trên UniqueID, vì bộ sưu tập sẽ lớn và tìm kiếm tuyến tính sẽ không cắt nó.
'Giải pháp' hiện tại của tôi là sử dụng danh sách std :: cùng với sơ đồ std ::. Danh sách chứa Persons (để truy cập theo thứ tự) và bản đồ được sử dụng để ánh xạ UniqueID để tham chiếu đến mục danh sách. Cập nhật 'vùng chứa' thường bao gồm việc cập nhật cả bản đồ và danh sách.
Nó hoạt động, nhưng tôi cảm thấy cần phải có cách làm thông minh hơn, có thể là boost:bimap
. Gợi ý?
EDIT: Có một số nhầm lẫn về yêu cầu của tôi đối với "đặt hàng". Để giải thích, các đối tượng được truyền theo tuần tự từ một tệp và 'thứ tự' của các mục trong vùng chứa phải khớp với thứ tự tệp. Thứ tự không liên quan đến ID.
Bạn có ý nghĩa gì với 'X + 1' và' X-1'? Tôi có cảm giác nó không ám chỉ đến trường 'UniqueID', vậy nó là gì? Bạn đang đề cập đến thứ tự gì? –
Tôi đang đề cập đến thứ tự trong vùng chứa. tức là (giả định một vectơ) Mảng [X], [X-1] và [X + 1] – Roddy
Thứ tự trong thùng chứa là gì? Tôi nghĩ đó là những gì Matthieu đang cố gắng nắm bắt. – Joel