如何将std::映射输出到二进制文件
How to output a std::map to a binary file?
如何将std::map
输出到二进制文件?
map声明如下所示。
map<string, Account *> accounts;
ofstream os(outFileName.c_str());
os.write( );
我需要知道在write()
函数中放入什么,才能使它按我想要的方式工作。我需要一个接一个地输出类Account
吗?还是只将其作为map
输出是安全的?
由于将其存储为指针,因此必须对映射进行迭代,首先存储键,然后逐个存储指向Account的键。
使用数据库似乎可以做得更好。尤其是如果你需要在多个地方这样做的话。
对对象执行此操作的做法称为序列化。
如果您的Account类是所谓的普通旧数据类(即,除了其他普通旧数据类别和结构外,它不包含指针,也不包含任何类别或结构),您只需将其内存直接写入文件即可。在这种情况下,可以接受以下方法:
int32_t sizeAccount = sizeof(Account); // this should always be a 32 bit int
for (map<string, Account *>::iterator i = accounts.begin(); i != accounts.end(); ++i)
{
int32_t sizeStr = i->first.length() + 1; // this should always be a 32 bit int
os.write(&sizeStr, sizeof(sizeStr)); // 4 byte length of string
os.write(i->first.c_str(), sizeStr); // null terminated string
os.write(&sizeAccount, sizeof(sizeAccount)); // 4 byte size of object
os.write(i->second, sizeAccount); // object data itself
}
但是,如果您的对象具有任何指针成员,或具有指针成员的类型的任何成员,或任何子类或超类,或具有子类或超类的类型的任意成员,等等,则这种方法可能是不够的,可能会产生无意义或完全不正确的输出。
您想要做的也被称为序列化
在另一个论坛上查看这个帖子,它可能会帮助你
您需要一个接一个地输出它们。
二进制写入在(内部)包含指针的任何类上都不能正常工作。这当然包括std::map、std::string等。
相关文章:
- 读取二进制文件时如何输出?
- C++实现代码中的字符串不应存在于输出二进制文件中.如何解决
- 在C 中输出到二进制文件中的麻烦
- 如何获取与 objdump 输出的标签相对应的 ELF 二进制文件中的文件偏移量
- 如何在 c++ 中使用二进制文件输入/输出读取/写入结构的字符串类型成员
- 将对象(指针)在地图中输出到二进制文件
- 如何将std::映射输出到二进制文件
- 读取并输出二进制文件(C++)中位置的字节
- 在线C++编译器:为我输出二进制文件
- 正在读取C++中的二进制文件,并将结果输出为hexdump
- 如何在 C++ 中使用更改光标输入和输出二进制文件
- C ++如何以二进制格式输出Ply文件
- 如何将整数和双精度输出到二进制文件
- 二进制文件中结构的输出返回垃圾
- 用C++将二进制字符串输出到二进制文件
- 自动使输出二进制文件大于命令行编译的二进制文件
- 字节输出到二进制文件c++
- 输出一个写在二进制文件c++中的double
- 从turbo c++中的二进制文件读取后出现意外输出
- 有没有一种方法可以在输出二进制文件中存储clang编译时标志