c++ - 插入 map 库无效

标签 c++ dictionary insert

我有以下程序,在插入 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 仍会指向您的 mapend()(如果它尚不存在)。

试试这个:

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/

相关文章:

c++ - 如何在 Delphi 中调试 DLL 文件

c++ - 对于使用C++ 20破坏运算符delete的非多态派生类,则为unique_ptr

c++ - 在 C++ 中,内置类型的简单初始化是否不受静态初始化顺序失败的影响?

c++ - 调用 new(堆)后意外的汇编程序代码抛出异常

MySQL:使 2 个值唯一

PHP MYSQL 'INSERT INTO $table VALUES ......' 字段数可变

java - 使用java将行插入mysql中的表时如何获得自动递增的列值?

python - 在使用 python 将值写入 csv 文件之前将值与字段名进行比较

python - 为什么我不能得到这个简单的 Python 字典的键/值对?

ios - 如何将 Alamofire 与 Json 字典中的数组一起使用?