2013-09-21 48 views
6

ở đó, trong thư viện chuẩn "++", bất kỳ cấu trúc vùng chứa/dữ liệu "Kết hợp" (tức là "Khóa-giá trị") nào có khả năng giữ trật tự, theo thứ tự chèn?C + 11 Vùng chứa liên kết giữ thứ tự chèn?

Tôi đã thấy một số chủ đề về điều này, tuy nhiên, dường như, hầu hết trước khi C++ 11.

Một số đề xuất sử dụng "boost :: multi_index", nhưng, nếu có thể, tôi sẽ "thay thế" sử dụng các thùng chứa/cấu trúc tiêu chuẩn.

Tôi thấy rằng C++ 11 có một số vùng chứa liên kết "không có thứ tự": link.

Có cách nào trong số này, theo một cách nào đó, "có thể định cấu hình", sao cho chúng chỉ được sắp xếp theo thứ tự chèn?

Cảm ơn!

C

+2

Chỉ cần sử dụng unordered_map và vectơ cùng nhau – aaronman

+1

Bạn đang tìm kiếm 'std :: vector >'? –

+0

Vì vậy, bạn muốn tương đương với * LinkedHashMap * của Java? – hyde

Trả lời

1

số

Bạn đang trộn truy cập tuyến tính với ngẫu nhiên. Không phải là người rất tốt.

Chỉ cần sử dụng cả hai vector/list (ví dụ: thứ tự chèn) cùng với bản đồ bằng cách sử dụng chỉ mục vào trước đây.

+2

Chúng là những loại giường ngủ rất tốt, rất đẹp khi có, cần điều này, và có thùng chứa như vậy cũng rất nhỏ. Nếu C++ không có, tôi hơi ngạc nhiên. Ví dụ: http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html – hyde

+0

@hyde - Nó chỉ liên kết hai cấu trúc dữ liệu với nhau. Hai - không phải một. –

+0

Hashmap đã là sự kết hợp của một số cấu trúc dữ liệu nội bộ, vì vậy tôi không thấy sự khác biệt nào ... Chèn lệnh hashmap vẫn cần một chút mã, nên được bọc bên trong một lớp và tất nhiên phải cung cấp chính xác cùng một giao diện như hashmap không có thứ tự bình thường. Lưu ý rằng việc giữ thứ tự chèn không ảnh hưởng đến hiệu quả thuật toán, không giống như giữ thứ tự sắp xếp. – hyde

0

Không; khả năng như vậy dường như đã hy sinh trong tên hiệu suất.

Thứ tự của các mục tương đương bắt buộc phải được giữ nguyên trên các thao tác bao gồm cả phục hồi, nhưng không có cách nào để chỉ định thứ tự ban đầu. Bạn có thể, theo lý thuyết, sử dụng std::rotate hoặc tương tự để hoán vị các đối tượng theo thứ tự mong muốn sau mỗi lần chèn. Rõ ràng là không thực tế, nhưng nó chứng tỏ sự thiếu khả năng là một chút tùy ý.

Đặt cược tốt nhất của bạn là giữ các chuỗi trong thùng chứa bên trong. Bạn có thể sử dụng bộ điều hợp vòng lặp để lặp qua vùng chứa "sâu" như thể nó là một chuỗi duy nhất. Một tiện ích như vậy có thể được tìm thấy trong Boost.

0

số Trong bản đồ không có thứ tự quá, không được lưu trữ theo thứ tự chèn.

Bạn có thể sử dụng vector để theo dõi khóa !

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