如何填充提升递归映射容器
How to populate boost recursive map container
我尝试使用boost中的以下示例:
#include <boost/container/map.hpp>
struct data
{
std::string label;
//A map holding still undefined 'data'
boost::container::map<std::string, data> m_;
};
int main(int argc, char* argv[])
{
data d,d1,d2;
d.m_["hello"] = d1;
return 0;
}
不幸的是它没有编译,我不知道为什么。
编译器消息(只是它的结尾):../../3d_party_4_5_8/boost_1_49_0/boost/container/detail/tree.hpp|183|错误:与 ג((boost::container::container_detail::rbtree_node、std:::分配器>、data>、void*>*)this)->boost::container::container_detail::rbtree_node、std::分配器>、data>、void*>::m_data.boost::container::container_detail::p air、std:::allocator>、data>:::second = p->boost::container::container_detail::p air, std::allocator>, data>::secondג分析仪.cpp|139|注意:候选人是:data&data::operator=(data&)
我认为您正在C++03模式下编译:请参阅派生自或保存可复制和可移动类型的类中的赋值运算符。您的赋值运算符是非常量,如错误消息所示:data& data::operator=(data&)
,这就是问题所在。 boost::container
在 C++03 编译器中模拟移动语义,为此定义了一个非 const 复制构造函数。一种可能的解决方案是将以下内容添加到data
:
data& operator=(data x)
{
std::swap(*this, x);
return *this;
}
或
data& operator=(const data& x)
{
label = x.label
return *this;
}
根据您的需求。
我从没想过这是可能的。但事实确实如此。尝试插入以下内容:
//...
int main(int argc, char* argv[])
{
data d,d1,d2;
d.m_.insert( std::make_pair(std::string("hello"), d1) ) ;
return 0;
}
// ...
。它甚至可以在 C++03 中工作。
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 在映射中插入地址时,新运算符重载会导致无限递归
- 如何填充提升递归映射容器