2014-04-23 66 views
-2

我第一次嘗試boost lib,不知道如何分配字符串和共享指針的映射。 這裏是我的代碼,我試圖分配值,但無法做到這一點。如何將值賦給std :: map類型的成員變量<std :: string,shared_ptr <A>>

#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。 真的不知道該做什麼以及如何開始。如果我能夠分配,那麼我可以繼續前進,以完成序列化。

+0

嗨。你看起來很困惑。你知道一個'std :: map'是什麼,它是如何工作的?那'shared_ptr'呢? – jrok

+5

@manu _u hv spk englsh n ths sit_。不是因爲我們無法理解事物,而是因爲它使你看起來不尊重你想幫助你的人。如果你懶得寫幾句話,你根本就不會成功,而且幫你浪費時間。 – sehe

+0

對不起,先生!我沒有有目的地做它..有時很匆忙...... – manu

回答

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::maphere(並且如果您還不知道,請避免使用shared_ptr<>,並且不是200%確定需要)。

+0

地圖中沒有鑰匙..我們必須添加鑰匙..我們可以給鑰匙 – manu

+0

任何值可以請給我一個例子..我試着我的結局..你結果 – manu

+1

@manu _Do_閱讀鏈接的文檔。 'my_map [key]'_does_如果不存在,則添加密鑰。如果你不知道如何爲'key'(?!)賦值,那麼你可以停止這樣做並[先讀一本書](http://stackoverflow.com/questions/388242/the-definitive-c -book引導和列表)。 – sehe

相關問題