2014-09-03 14 views
5

Tôi đang tìm một lớp chứa C++ được lập chỉ mục như một số std::vector, nhưng có chèn nhanh, xóa và lập chỉ mục. Ví dụ, một giao diện vector được thực hiện với một cây cân bằng cơ bản sẽ có các phép chèn/xóa O (logN) và lập chỉ mục O (logN).Container có chèn nhanh và chỉ mục?

Để rõ ràng: Tôi không tìm kiếm std::map<int, T>. Chèn phần tử tại chỉ mục N sẽ tăng chỉ mục của tất cả các phần tử tiếp theo trong mảng mà không phải là trường hợp với std::map<int, T>.

Tôi đã tìm thấy AVL Array làm chính xác những gì tôi đang tìm kiếm. Nó có giao diện phù hợp, nhưng tôi muốn xem nếu có các tùy chọn khác.

Bạn có biết bất kỳ triển khai nào khác (chất lượng sản xuất) không? Có lẽ một cái gì đó phổ biến hơn (không tăng có một cái gì đó của loại?). Một cái gì đó với một dấu chân bộ nhớ nhỏ hơn? (Một nút giữ con trỏ trong Mảng AVL là 64 byte trên máy của tôi.)

+0

bạn có thể xây dựng trên lý do tại sao bạn yêu cầu truy cập ngẫu nhiên? – BeyelerStudios

+1

Điều này dường như không có chủ đề - tìm kiếm các khuyến nghị về phần mềm/thư viện. –

+1

Tôi không nghĩ rằng có một điều đơn giản hơn (về cấu trúc dữ liệu) làm những gì bạn muốn, vì vậy nó đòi hỏi 2 ptrs cho next/prev và 3 ptrs cho parent/left/right cộng với con trỏ ban đầu. Tổng cộng, 6 con trỏ = 48 byte cho môi trường 64 bit. Đó là ít nhất bạn có thể đạt được trong điều khoản của bộ nhớ (tôi nghĩ). – mostruash

Trả lời

1

Bạn đã nghĩ đến việc sử dụng SkipLists chưa? Về cơ bản nó là một danh sách liên kết, với nhiều cấp độ của các phím tắt được thêm vào đầu được tổ chức như một cây. Không xáo trộn các nút, chỉ cần cập nhật một vài con trỏ. Các phím tắt cho phép bạn lặp lại nhanh hơn nhiều trong danh sách của bạn. Một trong những mục yêu thích của tôi.

http://openmymind.net/Building-A-Skiplist/

http://en.wikipedia.org/wiki/Skip_list

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