我如何为std :: map <std :: string,shared_ptr <a>&gt; </std :: string,shared_ptr <a>类型的成员变量赋值

时间:2014-04-23 10:54:58

标签: c++ serialization boost boost-serialization

我是第一次尝试使用boost lib并且不知道如何分配字符串和共享指针的映射。 这是我的代码,我正在尝试分配值,但无法做到。

#include <boost\shared_ptr.hpp>
#include <boost\assign.hpp>
#include <boost\map.hpp>

struct X
{
   public:
      int p;
      double q;

      X();
     ~X();
};

struct Y
{
    float m;
    double n;

     Y();
    ~Y();
};

struct Z
{
public:
   std::map<std::string,boost::shared_ptr<X>> Xtype;
   std::map<std::string,boost::shared_ptr<Y>> Ytype; 

   int i;
   string name; 

   Z();
  ~Z();

};

struct X *x1;
struct Y *y1;

void setx()
{
  x1->p=10;
  x1->q=20.20;
}


void sety()
{
   y1->m=10;
   y1->n=20.20;
};

void initialize(Z *z1)
{

    z1->i=30;
    // how to i add x1 and y1 to Xtype and Ytype respectively of z1 struct
}

我的问题: - 如何将x1和y1值分配给z1类型的Xtype和Ytype。 真的不知道该做什么以及如何开始。如果我能够分配,那么我可以继续进行序列化。

1 个答案:

答案 0 :(得分:1)

只需使用[]运算符:

std::map<std::string, some_type> my_map;
some_type object=get_object();        // an object that you want to insert into the map
std::string key=get_key();            // the key you want to associated with object
assert(my_map.empty());               // no keys in map yet! (only for demonstration)
my_map[key] = object;

如果地图已包含提供的密钥,则替换该密钥的对象。 否则,将生成一个新的地图条目并使用对象进行初始化。详细了解std::map here(如果您还不知道,请避免使用shared_ptr<>,并且不是200%确定需要它。)