map的序列化?

jogger007 2010-07-07 04:35:59
如题,
如何将map序列化,保存至文件,方便读取。
...全文
729 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jogger007 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 visualeleven 的回复:]
自己写一个,遍历map,将key-value写入
[/Quote]
写倒是不难,就是错误C1001一直很顽强
Eleven 2010-07-08
  • 打赏
  • 举报
回复
自己写一个,遍历map,将key-value写入
jogger007 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chenyu2202863 的回复:]
C/C++ code

ofstream out("VDisk.dat");
map<DWORD, int *> outMap;
//....
out << outMap;

map<DWORD, int *> mapIn;
in >> mapIn;
[/Quote]
LS确实很强,不过我弄了一早上,确实有不解的地方。
in到底是什么?
ifstream infile("VDisk.dat");
map<DWORD, int *> inMap;
infile>> inMap;
这样的话,一直弹C1001,并且所有方法用了一遍,不起作用!
chenyu2202863 2010-07-07
  • 打赏
  • 举报
回复

ofstream out("VDisk.dat");
map<DWORD, int *> outMap;
//....
out << outMap;

map<DWORD, int *> mapIn;
in >> mapIn;

chenyu2202863 2010-07-07
  • 打赏
  • 举报
回复
stl容器的序列化很简单,也别用什么MFC的CMap
chenyu2202863 2010-07-07
  • 打赏
  • 举报
回复

// 支持对map的序列化
template<typename ContainerT>
std::ostream &operator<<(std::ostream &os, ContainerT &container)
{
os << container.size() << std::endl;

for(ContainerT::iterator iter = container.begin();
iter != container.end(); ++iter)
os << iter->first << *(iter->second) << std::endl;

return os;
}

template<typename KeyT, typename ValueT>
std::istream &operator>>(std::istream &os, std::map<KeyT, ValueT *> &container)
{
size_t n = 0;
os >> n;

for(int i = 0; i != n; ++i)
{
KeyT nKey = 0;
ValueT *iter = new ValueT;
memset(iter, 0, sizeof(ValueT));

os >> nKey >> *iter;

container.insert(std::make_pair(nKey, iter));
}

return os;
}

hastings 2010-07-07
  • 打赏
  • 举报
回复
LZ四个三角形?
buyong 2010-07-07
  • 打赏
  • 举报
回复
I agree
[Quote=引用 2 楼 liyinlei 的回复:]
自己做就行了。
首先存入map里元素的个数,然后遍历map所有元素,存入key 和 value

读的时候依次读取,重新加入map
[/Quote]
岁月小龙 2010-07-07
  • 打赏
  • 举报
回复
map本身就支持排序的,不需要你再去排序了
oyljerry 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhaoxueqian1988 的回复:]

引用 1 楼 jameshooo 的回复:
STL类不支持序列化,只有MFC的类才支持序列化,换成CMap<>才行

那么怎样可以快捷的转换成CMap呢
[/Quote]
遍历你的map,然后再一个个插入CMap,两者结构类似
jogger007 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jameshooo 的回复:]
STL类不支持序列化,只有MFC的类才支持序列化,换成CMap<>才行
[/Quote]
那么怎样可以快捷的转换成CMap呢
stonewater 2010-07-07
  • 打赏
  • 举报
回复
你也太想省事了,自己写两个函数,一个写文件一个读文件不就好了
liyinlei 2010-07-07
  • 打赏
  • 举报
回复
自己做就行了。
首先存入map里元素的个数,然后遍历map所有元素,存入key 和 value

读的时候依次读取,重新加入map
jameshooo 2010-07-07
  • 打赏
  • 举报
回复
STL类不支持序列化,只有MFC的类才支持序列化,换成CMap<>才行

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧