我正在Visual Studio 2010中使用C++。我有一个STL集,当我的程序关闭时,它将保存到文件中。下一次程序启动时,我将(排序的)数据加载回一个集合中。我试图优化加载过程,并且遇到了麻烦。我怀疑问题是频繁的重新平衡,我正在寻找一种方法来避免这种情况。使用预排序数据加载STL集,C++
首先,我没有优化做的,使用 “SET->插入(常量VALUE_TYPE & X)”
时间:〜5.5分钟
然后我试图使用插件的版本( ),您在提示通为插入()的位置:
iterator insert (iterator position, const value_type& x);
粗略地说,我这样做:
set<int> My_Set;
set<int>::iterator It;
It = My_Set.insert (0);
for (int I=1; I<1000; I++) {
It = My_Set.insert (It, I); //Remember the previous insertion's iterator
}
时间:〜5.4分钟
几乎没有任何改善!我不认为这个问题是从文件读取开销 - 注释insert()会将时间减少到2秒。我不认为这个问题是在复制我的对象的开销 - 这是一个普通的旧数据对象与一个int和一个字符。
我能想到的唯一的事情就是该套装不断重新平衡。
1.)你同意我的猜测吗?
2.)有没有办法在加载设置时“暂停”重新平衡,然后在最后重新平衡一次? (或者...甚至会有帮助吗?)
3.)有没有更明智的方法来加载排序后的数据,即不是简单地从最低到最高?也许交替我的插入,以便它不必经常平衡? (例如:插入1,1000,2,999,3,998,...)
这是一个DEBUG构建?时代看起来像一个。 – 2011-03-23 20:33:46
这是一个DEBUG构建。但是我们正在处理大量的数据,所以〜5.5min并不令我感到意外。 – Jugulum 2011-03-23 20:38:21
对不起,“尚未”==“是”。 – Jugulum 2011-03-23 20:38:41