hashmap遍历问题,查找顺序并非插入时的顺序
今天遍历hashmap读取数据时,发现我的map对象已经把配置表的所有数据都读取出来了,但是去遍历的时候,发现只遍历了一部分数据。
MAP_OF_CFG_DATA::iterator iter_begin = map_of_cfg_data_.begin();
MAP_OF_CFG_DATA::iterator iter_end = map_of_cfg_data_.end();
//这是需要获取的一个数据的结构体
TIMING_DATA timing_data;
//这里开始去遍历
for(iter_begin; iter_begin != iter_end; ++iter_begin)
{
timing_data = iter_begin->second;
//如果达成条件了就退出
if_start = FunctionName(..);
if(if_start)
{
...
break;
}
}
在读取配置表的时候,map_of_cfg_data_这个hash_map对象存入的键值顺序分别是int类型的6,7,8,9,10…1,4,5,16,17,18
而在for循环里面遍历时,第一个数据却是5这个键值的,然后是18,当我想要判断7这个键所对应的数据内容时,发现一直遍历不到这个数据,后来才发现到6的时候就已经进入判断里面,然后break出去了。
总结:
hashmap会先用hash函数处理键值,让其能够均匀分布到map中,这就会导致map中key的顺序并非插入时候的顺序。