我有以下程序,在插入 map 时出现问题:
static std::map<std::string,void *> name_data_map;
std::map<std::string,void *>::iterator iter=name_data_map.find(name) ;
if( iter == name_data_map.end() )
{
tmp_data = (void *) malloc ( mt_get_dkstat_size() );
errorCode = getsproxy(tmp_data , name );
name_data_map.insert(pair<std::string,void *>(name,tmp_data) );
}
memcpy(*data, iter->second, mt_get_dkstat_size() ) ;
插入后,tmp_data
被破坏。我还想了解两种插入类型之间的区别:
name_data_map.insert(pair<std::string,void *>(name,tmp_data) );
name_data_map.insert(make_pair(name,tmp_data) );
感谢提前回复
最佳答案
iter
仍会指向您的 map
的 end()
(如果它尚不存在)。
试试这个:
static std::map<std::string,void *> name_data_map;
std::map<std::string,void *>::iterator iter=name_data_map.find(name) ;
if (iter == name_data_map.end())
{
tmp_data = (void *)malloc(mt_get_dkstat_size());
errorCode = getsproxy(tmp_data, name);
// Fix:
std::pair<std::map<std::string,void>::iterator,bool> ret;
ret = name_data_map.insert(pair<std::string,void *>(name,tmp_data));
iter = ret.first;
}
memcpy(*data, iter->second, mt_get_dkstat_size());
编辑:为了回答您关于这两种方法之间差异的问题,它们与 make_pair
的实现基本相同:
template <class T1,class T2>
pair<T1,T2> make_pair (T1 x, T2 y)
{
return ( pair<T1,T2>(x,y) );
}
关于c++ - 插入 map 库无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10126087/