【问题标题】:how do i assign value to member variable of type std::map<std::string,shared_ptr<A>>如何为 std::map<std::string,shared_ptr<A>> 类型的成员变量赋值
【发布时间】:2014-06-08 03:51:10
【问题描述】:

我是第一次尝试 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。 真的不知道该怎么做,怎么下手。如果我能够分配,那么我可以继续对其进行序列化。

【问题讨论】:

  • 嗨。你似乎很困惑。你知道std::map 是什么以及它是如何工作的吗? shared_ptr呢?
  • @manu u hv to spk englsh n ths sit。不是因为我们无法理解事情,而是因为这让你看起来不尊重你想帮助你的人。如果您懒得打几个字,那您根本不会成功,帮助您是浪费时间。
  • 对不起先生!我不是故意的..有时很着急..

标签: c++ serialization boost boost-serialization


【解决方案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&lt;&gt; 并且不能 200% 确定是否需要它,请避免使用它)。

【讨论】:

  • 地图中没有键..我们还必须添加键..我们可以给键的任何值
  • 可以给我一个例子..我正在努力..告诉你结果
  • @manu 阅读链接的文档。 my_map[key]确实添加不存在的密钥。如果您不知道如何为 key (?!) 赋值,那么您可以停止这样做,而 read a book first
  • @sehe - 先生,非常感谢您的参考链接,我已经开始阅读“Effective C++”,完成这本书的阅读和理解需要一些时间..
  • @manu 我给你举了一个例子。要使用map,您必须为映射对象提供合理的键。一个典型的例子是具有唯一名称(例如“manu the great”)的条目数据库,此时名称可以充当键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2012-12-05
相关资源
最近更新 更多