Cây cân bằng
__gnu_pbds::tree
Kèm theo: Địa chỉ tài liệu chính thức
1 2 3 4 5 6 | |
Tham số mẫu
Key: kiểu phần tử lưu trữ; nếu muốn lưu nhiều phần tửKeytrùng nhau thì cần dùngstd::pairhoặcstructkết hợp vớilower_boundvàupper_boundđể tra cứuMapped: kiểu chính sách ánh xạ (Mapped-Policy); nếu muốn chỉ ra container là tập, tương tự lưu trongstd::set, điềnnull_type(ở g++ phiên bản thấp lànull_mapped_type); nếu muốn chỉ ra container là tập có giá trị, tương tựstd::map, điền kiểuValuenhư trongstd::map<Key, Value>Cmp_Fn: hàm so sánh khóa, ví dụstd::less<Key>Tag: chọn cấu trúc dữ liệu nền, mặc địnhrb_tree_tag.__gnu_pbdscung cấp ba loại cây cân bằng:rb_tree_tag: cây đỏ-đen, thường dùng loại này; hai loại sau thường kém hơnsplay_tree_tag: cây splayov_tree_tag: cây vector có thứ tự, chỉ là cấu trúc có thứ tự bằngvector, tương tự mộtvectorđã sắp xếp để làm cây cân bằng; hiệu năng phụ thuộc vào dữ liệu có “cố tình” hay không
Node_Update: chính sách cập nhật nút, mặc địnhnull_node_update; nếu muốn dùngorder_of_keyvàfind_by_orderthì cầntree_order_statistics_node_updateAllocator: kiểu cấp phát bộ nhớ
Cách khởi tạo
1 2 3 4 | |
Hàm thành viên
insert(x): chèn phần tửx, trả vềstd::pair<point_iterator, bool>; phần tử đầu là iterator vị trí chèn, phần tử hai cho biết chèn thành công hay không.erase(x): xóa một phần tử/iteratorx. Nếuxlà iterator thì trả iterator tới phần tử saux(nếuxlàend()thì trảend()); nếuxlàKeythì trả về xóa thành công hay không (không tồn tại thì xóa thất bại).order_of_key(x): trả số phần tử nhỏ hơn chặtx(theoCmp_Fn), tức là thứ hạng bắt đầu từ \(0\).find_by_order(x): trả iterator của phần tử ứng với thứ hạng theoCmp_Fn.lower_bound(x): trả iterator của phần tử đầu tiên không nhỏ hơnx(theoCmp_Fn).upper_bound(x): trả iterator của phần tử đầu tiên lớn hơn chặtx(theoCmp_Fn).join(x): gộp câyxvào cây hiện tại,xbị làm rỗng (cần đảm bảo hàm so sánh và kiểu phần tử giống nhau).split(x,b): theoCmp_Fn, các phần tử \(\le x\) thuộc cây hiện tại, còn lại thuộc câyb.empty(): trả về có rỗng hay không.size(): trả về kích thước.
Lưu ý
Hàm join(x) yêu cầu miền giá trị của khóa trong cây được gộp và cây hiện tại không giao nhau (tức là mọi giá trị trong cây được gộp đều phải lớn hơn/nhỏ hơn toàn bộ giá trị của cây hiện tại), nếu không sẽ ném ngoại lệ join_error.
Nếu muốn gộp hai cây có miền giá trị giao nhau, cần chèn từng phần tử của một cây vào cây còn lại.
Ví dụ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
Tài liệu tham khảo
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:OI-wiki
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply