C++ 如何连接两个或多个boost fusion贴图?
我想从两个C++ 如何连接两个或多个boost fusion贴图?,c++,boost,boost-fusion,C++,Boost,Boost Fusion,我想从两个boost::fusion::map类型创建一个。其中一个映射中包含的类型可能存在于另一个映射中,如果是这种情况,我只希望在结果序列中使用该键的单个类型。也就是说,我希望键在加入后是唯一的 传统的操作似乎允许复制密钥,因此它似乎不是一个解决方案。有人知道我是如何做到这一点的吗 // Here is what I've got: using namespace boost::fusion; map< pair<int, int>, pair<double,
boost::fusion::map
类型创建一个。其中一个映射中包含的类型可能存在于另一个映射中,如果是这种情况,我只希望在结果序列中使用该键的单个类型。也就是说,我希望键在加入后是唯一的
传统的操作似乎允许复制密钥,因此它似乎不是一个解决方案。有人知道我是如何做到这一点的吗
// Here is what I've got:
using namespace boost::fusion;
map<
pair<int, int>,
pair<double, int>> Map1;
map<
pair<bool, int>,
pair<double, int>> Map2;
// I want to join Map1 with Map2 such that I have
static_assert(std::is_same<Map3, map<
pair<int, int>,
pair<double, int>,
pair<bool, int>>>::value, "");
//这是我得到的:
使用名称空间boost::fusion;
地图<
一对
配对>Map1;
地图<
一对
配对>Map2;
//我想把Map1和Map2连接起来,这样我就可以
静态断言(std::is_same>::value,“”);
您可能需要手动消除重复:使用c++14档全速运行
一个简单的实现仍然依赖于初步的c++1y支持:
struct erase_corresponding {
template<typename T, typename U>
auto operator()(T map, U elem) const {
return boost::fusion::erase_key<typename U::first_type>(map);
}
};
struct insert_helper {
template<typename T, typename U>
auto operator()(T map, U elem) const {
return boost::fusion::insert(map, boost::fusion::end(map), elem);
}
};
struct erase\u对应{
模板
自动运算符()(T映射,U元素)常量{
返回boost::fusion::擦除_键(map);
}
};
结构插入辅助对象{
模板
自动运算符()(T映射,U元素)常量{
返回boost::fusion::insert(map,boost::fusion::end(map),elem);
}
};
然而,为了使它成为c++03的全部证明,您需要用结果(我留给读者作为练习)刚刚意识到第二个折叠现在可以简化为一个简单的连接:)
auto r =
as_map(
fold(
fold(m1, m2, erase_corresponding()),
m1,
insert_helper()
));
struct erase_corresponding {
template<typename T, typename U>
auto operator()(T map, U elem) const {
return boost::fusion::erase_key<typename U::first_type>(map);
}
};
struct insert_helper {
template<typename T, typename U>
auto operator()(T map, U elem) const {
return boost::fusion::insert(map, boost::fusion::end(map), elem);
}
};