我试图弄清楚从 std::set 中擦除多个元素的复杂性。我使用这个页面作为来源。
它声称使用迭代器擦除单个项目的复杂性摊销为 O(1),但使用范围形式擦除多个项目是 log(c.size()) + std::distance(first, last) (即 -集合大小的日志 + 删除元素的数量)。
从表面上看,如果要擦除的元素数 (n) 远小于集合中的元素数 (m),这意味着循环遍历要擦除的元素并一次擦除它们会更快(O(n))而不是通过一次调用(O(log m)假设n <<m)擦除它们。
显然,如果真的是这样的话,第二种形式的内部实现只会执行上述循环。
这是网站的错误吗?规格中的错误?我只是错过了什么吗?
谢谢,沙查尔