哈希(hash_map)快还是红黑树(map)快?
多数情况下我使用hash_map。以前测试速度一致只是测试查找速度,hash_map的查找速度的确是不错的。但刚才测试了hash_map删除速度,结果令人大跌眼镜。(下面贴出的伪代码,实际测试的当然是能通过编译并运行的)
//填充数据结构
struct ITEM
{
int a;
int b;
char c[50];
};
hash_map<int, ITEM> HM;
//添加
ITEM item;
for (int i=0;i<xx;i++)
{
item.a=i;
HM.insert(i, item);
}
//删除
hash_map<int, ITEM>::iterator it;
for (int i=0;i<xx;i++)
{
it = HM.find(i);
HM.erase(it);
}
测试结果:
执行数目————添加耗时————全部删除耗时——删除1项耗时
100——————4.2ms——————3.8ms——————0.078-0.081
1000——————46ms———————92ms——————0.078-0.081
10000—————482ms——————12866ms——————0.078-0.081
100000—————4619ms——————349453ms————0.078-0.081
全部删除时,是模拟实际应用,一项项地删除。
单独删除一项一般0.08毫秒,以此计算删除100000项只要8000毫秒即可,但在循环中删除却要349453毫秒。为什么循环全部删除效率这么惨?
如果用红黑树的map会不会快些?大家来谈谈。