我怎样才能输出一个std::map
到二进制文件?
地图声明如下所示。
map<string, Account *> accounts;
ofstream os(outFileName.c_str());
os.write( );
我需要知道要放入什么write()
让它按照我想要的方式工作。我需要输出类吗Account
一对一或者我可以安全地将其输出为map
?
由于您将其存储为指针,因此您必须迭代映射,首先存储密钥,然后存储指向的帐户,一一存储。
这似乎可以通过数据库做得更好。特别是如果您需要在多个地方执行此操作。
对对象执行此操作的做法称为序列化。
如果您的 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
}
但是,如果您的对象具有任何指针成员,或具有指针成员的类型的任何成员,或任何子类或超类,或具有子类或超类的类型的任何成员等,则此方法可能不够,并且可能会产生要么是无意义的,要么是完全错误的输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)