我试图弄清楚从std :: set中删除多个元素的复杂性。我正在使用这个页面作为参考。
它声称使用迭代器删除单个项目的复杂度是平摊O(1),但使用范围形式删除多个项目的复杂度是log(c.size())+ std :: distance(first,last)(即集合大小的对数+删除的元素数)。
直接看,如果要删除的元素数量(n)远小于集合中的元素数量(m),这意味着循环遍历要删除的元素并逐个删除比一次性删除它们更快(O(n)),前提是n << m,则O(log m))。
显然,如果真的是这样,第二种形式的内部实现将执行上述循环。
这是站点上的错误吗?规格书上的错误吗?还是只有我错过了什么?
谢谢, 沙哈尔
它声称使用迭代器删除单个项目的复杂度是平摊O(1),但使用范围形式删除多个项目的复杂度是log(c.size())+ std :: distance(first,last)(即集合大小的对数+删除的元素数)。
直接看,如果要删除的元素数量(n)远小于集合中的元素数量(m),这意味着循环遍历要删除的元素并逐个删除比一次性删除它们更快(O(n)),前提是n << m,则O(log m))。
显然,如果真的是这样,第二种形式的内部实现将执行上述循环。
这是站点上的错误吗?规格书上的错误吗?还是只有我错过了什么?
谢谢, 沙哈尔