从unordered_map中擦除最后一个元素时花费的时间更多

时间:2014-04-07 16:26:33

标签: c++ visual-studio-2010 unordered-map

我发现了一个非常奇怪的现象,就是当从unordered_map中删除最后一个元素时,它花费的时间要多得多,所以我的程序似乎在那里无穷无尽。我的IDE:VS2010

在我的程序中,unordered_map的定义如下:

unordered_map<void*, int> m_hashmap_pos;

最初,它的大小为N,其中N = 35838位于我的程序中。迭代地,我从这个unordered_map中删除了一个元素,因此它包含存储的最后一个元素,到目前为止每个擦除操作的时间似乎是不变的,有关此unordered_map的信息可以从下图中看到

从图中我们可以看到唯一的左键和输入匹配,即0x0000000004a30c40

但是,如果我继续删除此unordered_map中的最后一个,该程序似乎无穷无尽。我点击了&#34;暂停&#34;按钮,看看它在哪个功能,我发现它在文件_Orphan_me()中被称为xutility

请帮助我解释为什么会发生这种情况以及如何避免它。

为方便起见,我编写了以下代码进行模拟。您可以在计算机上试用它。

int main()
{
    int N = 36000;
    unordered_map<void*, int> hm;
    vector<int**> A(N);
    for (int i=0; i<N; i++)
    {
        A[i] = new int*;
        hm[A[i]] = i;
    }

    for (int i=0; i<N; i++)
    {
        if (i == N-1)
        {
           cout << "Start removing last element from unordered_map: Now is ";
           system("time /t");
        }

        hm.erase(A[i]);

        if (i == N-1)
        {
           cout << "removing completed! Now is ";
           system("time /t");
        }
     }
     system("pause");
}

enter image description here

0 个答案:

没有答案