2012-04-23 96 views
0

我在C++ STL容器映射中遇到了一個問題。關於STL容器

class c1 { 

map<int , vector<entity>> mapobject //where entity is a structure 

c1{ 

    entity er; 
    er.entityId = 1; 
    er.nameId = 1; 

    std::vector<entity> record; 
    record.push_back(er); 

    mapobject.insert(std::pair<int,std::vector<entity>>(1,record)); 

} 
} 

其中我是從上面的代碼中面臨的問題是,構造外,所有的晶格結構域中包含無用值。請問班級變量 - 地圖不能深層複製內容?

請幫我在這

--kumar

+0

你的代碼是非常不正確的。什麼是c1,你的函數在哪裏,爲什麼地圖聲明是一個字符串? – 2012-04-23 07:10:46

+0

'entity'看起來像什麼? – 2012-04-23 07:20:09

+0

除了上面的廣泛的語法錯誤選擇,你是否確定這些字段包含垃圾?你不只是試圖調試發佈模式的構建,是嗎? – RobH 2012-04-23 07:22:17

回答

1

你需要實現一個拷貝構造函數entity

class entity 
{ 
public: 
    entity(const entity& other) 
    {} 
}; 

C++默認情況下不深拷貝的對象。也有在你的代碼中的一些語法錯誤:

class c1 { 

map<int , vector<entity>> mapobject; //missing semicolon 

c1() { //missing parameter list 

    entity er; 
    er.entityId = 1; 
    er.nameId = 1; 

    std::vector<entity> record; 
    record.push_back(er); 

    mapobject.insert(std::pair<int,std::vector<entity>>(1,record)); 

} 
}; //missing semicolon 
+0

如果實體確實只包含兩個整數成員,默認的複製構造函數將會很好。此外,除非在關閉尖括號之間的mapObject聲明中添加空格,否則上述內容將不會編譯。 (除非這是C++ 11?) – RobH 2012-04-23 07:19:26

+0

@RobH如果'entity'是一個POD類型,它會工作。 – 2012-04-23 07:23:07

+0

我已經實現了複製constructor.still它包含構造函數後的垃圾值。 – 2012-04-23 07:23:50

0

,您顯示,如果所有的語法錯誤的修正就可以了代碼。你確定數據真的在構造函數外面是「垃圾」嗎?如果您正在調試器中檢查c1的實例,但是已經構建了發佈模式版本,則它會顯示爲包含垃圾。那只是以這種方式進行調試的一種人造物。