Lin*_*ult 5 c++ multimap erase clear
我们使用multimap进行快速值/索引查找,如下所示
typedef double Numerical;
std::multimap<Numerical, Int32> SortableRowIndex;
Run Code Online (Sandbox Code Playgroud)
我们用对子填充它们
SortableRowIndex.insert(std::pair<Numerical, Int32>(GetSortable(i), i));
Run Code Online (Sandbox Code Playgroud)
函数GetSortable()总是返回一个double.这很好用.迭代这些值也可以正常工作.但接下来是奇怪的部分...有时我们试图清除数据......
SortableRowIndex.clear();
Run Code Online (Sandbox Code Playgroud)
...它会进入某种循环和失速/比赛,以100%的速度占用CPU的核心.
clear方法似乎是从xtree(系统文件)继承而来的,其中只有一行内联:
void clear() _NOEXCEPT
{ // erase all
#if _ITERATOR_DEBUG_LEVEL == 2
this->_Orphan_ptr(*this, 0);
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */
_Erase(_Root());
_Root() = this->_Myhead;
_Lmost() = this->_Myhead;
_Rmost() = this->_Myhead;
this->_Mysize = 0;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我的Visual Studio 2013在调试时不会让我进入这个方法......我不能,因为我的生活中弄清楚问题是什么!
任何帮助都将受到极大的赞赏!
事实证明,它并没有真正停止,但通过 Visual Studio 的调试器清除多重映射确实很慢。我注意到内存释放得很慢,让它运行几分钟,然后终于完成了。在 Visual Studio 之外运行应用程序会使 .clear() 调用下降到 < 1 秒,即使对于数百万对也是如此。
因此,如果您在 Visual Studio 中以调试模式运行时要清除巨大的多重贴图,请注意。太慢了。