考虑到这些类型:
struct ComplexLibraryThing { /*lots of fields*/};
typedef std::map<int, ComplexLibraryThing> MyMap;
struct ShadowComplexLibraryThing { /*Shadow of ComplexLibraryThing*/};
struct MyVecType { int a; ShadowComplexLibraryThing b; };
typedef std::vector<MyVecType> MyVector;
我可以为序列化做这件事情(我的序列化库不支持类似map的类型):
MyVecType map2pair(std::pair<int, ComplexLibraryThing> const &myPair)
{
MyVecType retVal;
retVal.a = myPair.first;
retVal.b = convertForSerialisation(myPair.second);
return retVal;
}
MyMap myMap = {...};
MyVector myVector;
std::transform(myMap.begin(),
myMap.end(),
std::back_inserter(myVector),
map2pair);
我随后将该向量发送给想要重建 MyMap
的接收方。然而,我找不到一个适合像这样进行反序列化的 <algorithm>
模板:
MyMap myNewMap;
for (auto const &entry: myVector)
myNewMap[entry.a] = convertForDeserialisation(entry.b);
如何使用<algorithm>
编写这个代码?
(请注意,映射中的ComplexLibraryThing
类型不能轻易更改,但我也有一个可以更改的ShadowComplexLibraryThing
)
std::transform
?或者将std::for_each()
与lambda结合使用?我想我可能漏掉了什么 :-/ - piwiMyVecType
本身吗? - StoryTeller - Unslander Monicastd::pair
,则可以将其插入到映射中。这解决了您的问题吗? - Zalman Sternmap
。 - druckermanlymyNewMap.insert(std::make_pair(entry.a, convertForDeserialisation(entry.b));
(这避免了默认构造映射条目然后再分配给它)。 - Martin Bonner supports Monica