gpt4 book ai didi

c++ - unordered_multimap::equal_range 慢

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:16 25 4
gpt4 key购买 nike

我希望 unordered_multimap::equal_range 具有平均恒定的复杂度,但是以下内容并不像预期的那样随 n 线性扩展:

#include <iostream>
#include <tr1/unordered_map>
#include <cstdlib>

using namespace std::tr1;
using namespace std;

int main(){
int n;
cin >> n;
unordered_map<int, int> um;
for(int i=0; i<n; ++i){
um.insert(make_pair(i%100000, i));
pair<unordered_map<int, int>::iterator,unordered_map<int,int>::iterator > t = um.equal_range(i);
}
}


$ g++ testbr.cpp
$ time echo 10000 | ./a.out

real 0m0.065s
user 0m0.060s
sys 0m0.003s
$ time echo 100000 | ./a.out

real 0m4.492s
user 0m4.490s
sys 0m0.003s

有办法解决这个问题吗?

编辑:如果没有 equal_range,它会按预期完美缩放。
此外,如果我插入所有具有相同键 0 的元素(并始终调用 equal_range(0)),它会按预期缩放,即使 boost 文档指出相等范围平均为 O(count(k))...?

最佳答案

这似乎是 libstdc++ 中的一个错误,我在任何地方都找不到错误报告,但是 #include <unordered_map>并使用 -std=c++11 进行编译我得到了预期的行为。

关于c++ - unordered_multimap::equal_range 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com