我有一个数字列表,其中我需要支持两种类型的多个查询:要么我可以删除一个元素,要么我需要在剩余的列表中找到kth minimum(每个查询中k可以不同)元素。
因为如果我使用自平衡bst,这两个在对数时间内都可以支持,而且由于std::set是在自平衡bst上实现的,所以应该有一个api用于在对数时间内使用它访问kth元素。如果没有这种方法:
i)为什么?在我看来,这是一个常见的用例。
i i)实现自我平衡树是我唯一的希望还是我可以使用其他东西来实现它?

最佳答案

您需要使用基于策略的数据结构。

To delete you can use : erase(T elementToerase)
To find the kth element : find_by_order(int k) where k is 0 based indexing
                          it returns iterator to kth element.

两个操作都是O(logn)
更多详情:https://gcc.gnu.org/onlinedocs/libstdc++/manual/policy_data_structures_design.html

关于c++ - 如何以对数时间访问C++ std::set中的kth元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58462671/

10-08 22:36