我发现了一个非常奇怪的现象,就是当从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");
}