首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教怎么将一个MAP的VALUE放到一块连续内存里

2012-04-21 
求教如何将一个MAP的VALUE放到一块连续内存里?我有个MAP a,我现在需要遍历map,将a.second放到一个连续的内

求教如何将一个MAP的VALUE放到一块连续内存里?
我有个MAP a,我现在需要遍历map,将a.second放到一个连续的内存块里,请问如何能实现?
我现在是这么做的
char bodyData[150][117];
map<string,string> a;
map<string,string>::iterator iter;
for(iter=a.begin();iter!=b.end();iter++)
  strcpy(bodyData,a.second);

这里有一个问题就是,我在另一个循环里会构建a,每次构建的a.second的长度可能会变化。比如第一次构建完成后,a.second都为116,此时输出是没有问题的。第二次为120,那就会越界了。我的要求是bodyData每个字符串的长度必须等于a.second.length。如果每次都用new char[a.second.length()]的话,那么会导致内存不连续,这也不是我想要的。因为后续我要用到对bodyData的引用,因此该块内存必须是连续的

[解决办法]
map的value里面存指向连续内存区域的指针
[解决办法]

C/C++ code
第二种,放 字符串。static char bodyData[1024*1024];struct Stringbuf{int len;char data[0];void set(string &s){len=s.size();//string lengthmemcpy(data,&s[0],s.size());}};size_t end=0;Stringbuf *p=(Stringbuf *)bodyData;for(iter=a.begin();iter!=b.end();iter++){Stringbuf *p= (Stringbuf *p)(bodyData+end);p->set((*it).second);end+=(*it).second.size()+sizeof(Stringbuf);}
[解决办法]
什么乱七八糟的用法,map用的是红黑树,每次加入数据并不能保证在最后,怎么可能做到连续?
还有 strcpy(bodyData,a.second);要加c_str把?

热点排行