C++ 有没有办法序列化稀疏散列映射的类型<;字符*,整数>;归档?

C++ 有没有办法序列化稀疏散列映射的类型<;字符*,整数>;归档?,c++,serialization,sparsehash,C++,Serialization,Sparsehash,我试图编写代码将稀疏散列映射的类型序列化到文件,但不知何故,它就是不起作用,它告诉我以下错误消息: /usr/local/include/sparsehash/sparsetable:1763:13:错误:调用“CharPointerPointSerializer”类型的对象时没有匹配的函数。 if ( !serializer(fp, &*it) ) return false; ^~~~~~~~~~ 看起来mymap.serialize方法工作得很好,是myma

我试图编写代码将稀疏散列映射的类型序列化到文件,但不知何故,它就是不起作用,它告诉我以下错误消息:

/usr/local/include/sparsehash/sparsetable:1763:13:错误:调用“CharPointerPointSerializer”类型的对象时没有匹配的函数。

  if ( !serializer(fp, &*it) )  return false;

        ^~~~~~~~~~
看起来mymap.serialize方法工作得很好,是mymap2.unsirialize方法失败了,下面代码中的问题有什么想法吗

#include <iostream>
#include <sparsehash/sparse_hash_map>
using google::sparse_hash_map;      // namespace where class lives by default

using namespace std;

#define SIZE 13

struct CharPointerToIntSerializer {
  bool operator()(FILE* fp, std::pair<char *, int>* value) const {
    if (fread(value->first, SIZE, 1, fp) != 1) {
      return false;
    }
    if (fread(&(value->second), sizeof(value->second), 1, fp) != 1)
      return false;
    return true;
  }

  // bool operator()(FILE* fp, const std::pair<const char *, int>& value) const {
  bool operator()(FILE* fp, const std::pair<char *, int>& value) const {
    for(int i = 0; i < SIZE; i++){
      if (fwrite(value.first + i, 1, 1, fp) != 1)
    return false;
    }

    if (fwrite(&value.second, sizeof(value.second), 1, fp) != 1)
      return false;
    return true;
  }
};

int main(){
  sparse_hash_map<char*, int> old_map,new_map;
  char *p1, *p2;
  p1 = (char *) malloc(10);
  p2 = (char *) malloc(10);
  strcpy(p1, "hello");
  strcpy(p2, "world");
  old_map[p1] = 1;
  old_map[p2] = 2;

  FILE* fp = fopen("hashtable.txt", "w");
  old_map.serialize(CharPointerToIntSerializer(), fp);
  cout << old_map[p1] << endl;
  fclose(fp);

  FILE* fp_in = fopen("hashtable.txt", "r");
  new_map.unserialize(CharPointerToIntSerializer(), fp_in);
  fclose(fp_in);
  assert(old_map == new_map);
  cout << new_map[p2] << endl;
}
#包括
#包括
使用google::稀疏散列映射;//默认情况下类所在的命名空间
使用名称空间std;
#定义尺寸13
结构CharPointerPointSerializer{
布尔运算符()(文件*fp,std::pair*值)常量{
如果(fread(值->第一个,大小,1,fp)!=1){
返回false;
}
如果(fread(&(value->second),sizeof(value->second),1,fp)!=1)
返回false;
返回true;
}
//bool运算符()(文件*fp,常量std::对和值)常量{
bool运算符()(文件*fp,常量std::对和值)常量{
对于(int i=0;icout稀疏映射的值类型是
std::pair

bool operator()(FILE* fp, std::pair<char*, int>* value) const;
bool operator()(FILE* fp, std::pair<char*, int> const& value) const;
bool操作符()(文件*fp,std::pair*value)常量;
bool操作符()(文件*fp,std::pair const&value)const;
应该是

bool operator()(FILE* fp, std::pair<char* const, int>* value) const;
bool operator()(FILE* fp, std::pair<char* const, int> const& value) const;
bool操作符()(文件*fp,std::pair*value)常量;
bool操作符()(文件*fp,std::pair const&value)const;
分别


这是针对sparsehash 1.12(Ubuntu随附v1.10打包版!)进行编译的。

这与boost有什么关系?对不起,一些遗留代码,它已经被删除了。正如你所指出的,我确实更改了我的代码,它编译:)这里做得很好。但是当我运行程序时,它会打印“分段错误:11”错误,我的序列化方法有问题吗?嗯,我真的陷入了困境,谢谢你的帮助~是的。有问题。(不要做原始指针。不要硬编码magic
SIZE
s等。很难不用这些东西写bug)我认为尝试取消序列化映射时出现了问题,因为映射键的类型是“char*const”,在我们将数据从序列化文件读入映射之前,无法分配足够的内存,因此出现了分段错误。gdb调试结果也验证了这一点。是否仍有将数据读入map.key(又称“char*const”的类型)?