C++ 从无序的_映射中删除最后一个元素时需要更多时间
我发现了一个非常奇怪的现象,那就是当从无序映射中删除最后一个元素时,它花费了更多的时间,因此我的程序似乎在那里无休止地运行。我的IDE:VS2010 在我的程序中,无序映射的定义如下:C++ 从无序的_映射中删除最后一个元素时需要更多时间,c++,visual-studio-2010,unordered-map,C++,Visual Studio 2010,Unordered Map,我发现了一个非常奇怪的现象,那就是当从无序映射中删除最后一个元素时,它花费了更多的时间,因此我的程序似乎在那里无休止地运行。我的IDE:VS2010 在我的程序中,无序映射的定义如下: unordered_map<void*, int> m_hashmap_pos; 那么,我们是否可以假设您的程序没有问题?我问你,因为你没有发。您只描述了您正在做的事情,而没有代码的描述意义甚微。或者更好的是,发布一个完整的、但很小的程序来复制这个问题。如果问题像你说的那么明显(一个无序的映射,用值
unordered_map<void*, int> m_hashmap_pos;
那么,我们是否可以假设您的程序没有问题?我问你,因为你没有发。您只描述了您正在做的事情,而没有代码的描述意义甚微。或者更好的是,发布一个完整的、但很小的程序来复制这个问题。如果问题像你说的那么明显(一个无序的映射,用值填充它,删除值),那就不会那么困难了。请,请,请解释一下,让映射形式
int*
到int
(如果你按照我的想法做的话,后面应该是std::size\t
),并执行类似于map[newint*]=index
的操作。我认为,这是一种实现内存池的非常奇怪和低效的方法。
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");
}