gpt4 book ai didi

c++ - 使用 std::transform 转换 std::vector 到 std::map

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:47 26 4
gpt4 key购买 nike

给定这些类型:

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);

然后我将 vector 发送给想要重建 MyMap 的接收者.但是,我找不到合适的 <algorithm>像这样进行反序列化的模板:

MyMap myNewMap;
for (auto const &entry: myVector)
myNewMap[entry.a] = convertForDeserialisation(entry.b);

我如何使用 <algorithm> 来写这个?

(请注意, map 中的 ComplexLibraryThing 类型不能轻易更改,但我也有一个 ShadowComplexLibraryThing 可以)

最佳答案

我认为缺少的关键“技巧”是 std::inserter。这是一个小演示。

#include <algorithm>
#include <iterator>
#include <map>
#include <vector>

struct foo {int a; int b;};

std::vector<foo> GenerateSource() {
return {};
}

std::pair<int, int> ConvertFooToMapPair(const foo& f) {
return {f.a, f.b};
}

int main(int argc, char* argv[]) {
std::map<int, int> destination;
std::vector<foo> source = GenerateSource();
std::transform(
source.begin(), source.end(),
std::inserter(destination, destination.end()),
ConvertFooToMapPair);
}

关于c++ - 使用 std::transform 转换 std::vector<struct{key; val;}> 到 std::map<key, val>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46948042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com