我正在从数据库加载数据并将其插入到地图中。当我尝试打印地图大小和数据时,它仍然显示大小1,只打印最后一行。之前的所有数据都会被覆盖并包含最后一个值。这里有任何指针 问题。由于公司问题,我更改了变量名称。
我也做了一些检查点。所有键值都是唯一的。
typdef long_char char[38];
for(int j = 0; j < 31; j++)
{
sample_enum param_sub_type = result_set[j];
long_char param_name;
strncpy(param_name,result_set[j], sizeof(param_name));
input_status_cd.insert(std::pair<long_char,sample_enum>(param_name, param_sub_type));
/*Insert Into Map */ <I suspect this may be issue but not sure>
}
/*Printing Size of map */
input_status_sd::size_type input_status_cd_size;
etlog_msg(intput_status_cd_size :] [%d]",intput_status_cd.size());
答案 0 :(得分:2)
这是因为long_char
被定义为char[38]
所以当你插入地图时,它将使用try operator<
,这将导致比较第一个字符的地址阵列。由于您在循环中创建此数组,因此很可能会分配相同的堆栈帧,因此第一个char的地址对于每个对象保持相同。因此,map
认为您再次插入相同的对象时,所有先前的数据都会被覆盖。解决此问题的最简单方法是使用std::string
作为long_char
的typedef。
答案 1 :(得分:1)
您应该使用std::map<std::string,sample_enum>
代替std::map<long_char,sample_enum>
。通过这种方式,operator<
的{{1}}将按预期工作(按字典比较)。使用std::string
,您不得使用std::string
复制字符串购买必须使用赋值运算符。