【发布时间】:2011-07-08 16:02:19
【问题描述】:
我正在将大量的 std::pair<int, int> 插入到 std::set 中,而且花费的时间比我想要的要长。当我编写代码时,我想如果结果是瓶颈,我会考虑使用插入的提示迭代器形式。好吧,现在它已被分析并且它是一个瓶颈。所以我想使用迭代器提示。
但是,我并不总是知道插入对子的好位置。我通常将它们分批插入(在这种情况下,一个批次大约是总输入大小的 0.01%,包括重复项)增加的集合顺序,但是当插入一个批次时,我不知道下一个应该在哪里开始。提示是如何使用的? insert 是否会从建议的位置执行类似于二进制搜索的操作?通常使用不好的提示会有多糟糕?
【问题讨论】:
-
比我想要的更长?我知道
O(n),O(log n),甚至O(n^2)...但是O(longer than I'd like)不在我的教科书中 -
好吧,事情也很少需要
O(log n)秒...但是执行约 200.000 次插入(有重复项)大约需要 4 秒。这对用户来说是一个明显的延迟,如果可以的话,我想缩短它 -
如果这是一个瓶颈,您可以使用
unordered_set进行基准测试。 Boost 或 STL,具体取决于您的编译器。
标签: c++