【发布时间】:2023-03-25 03:38:01
【问题描述】:
假设我有一个 STL set <int> s 和一个 int x,我如何计算 s 中小于 x 的元素数量?
我正在寻找O(log n)(或类似的;任何比O(n) 更好的解决方案);
我已经知道std::distance(s.begin(), s.lower_bound(x)),但我相信那是O(n),因为sets 不是随机访问的。
【问题讨论】:
-
你不能用标准的 C++ 集来做到这一点。
-
为什么不使用支持这些排序统计的二叉搜索树呢?如果是红黑BST,即使在最坏的情况下也能保证log(n)的性能。
-
flat set 是否适合您的需求?
-
顺便说一句,您不需要自己实现增强树。有“GNU Policy-Based STL”结构。类似这样的东西也被提议包含在 Boost 中。
-
@Abody97:是的,这就是成本,但有很多好处。您需要对其进行测试,看看它对于您的特定应用程序是否值得。根据我自己的经验,连续存储的好处往往超过线性插入和删除的成本。
标签: c++ performance algorithm stl complexity-theory