2013-06-26 87 views
0

我有一個關於從STL映射的問題。 我有我的類元素:奇怪的std :: map行爲

class Element { 

    Element(); 
    uint16_t getId(void); 

    private: 
    uint16_t myId; 

} 

進級ManagerClass我有一個std::map<uint16_t, Element> myMAP這種方法:

void loadElement() { 
    std::vector<Element> theVector = ConfigManager::getInstance().load(); 

    for(unsigned i = 0; i< theVector.size(); i++) { 
     Element el = theVector.at(i); 
     myMAP.insert(myElementPair(element.getId(), element)); 
    } 
} 

在ManagerClass的另一種方法,我有我撇去我的數據結構MYMAP崩潰:

void read() { 

    std::map<uint16_t,Element>::iterator it; 
    for(it=myMAP.begin(); it != myMAP.end(); ++it) { 
     std::cout << "The ID: " << it->first << std::endl; 
    } 
} 

我有所述第二元件上的碰撞(MYMAP包含2種元素)以及第一打印具有ID的奇怪值。 你能提出什麼問題嗎? 當我用這種方式插入一個元素時,std::map會製作一個元素的副本嗎?

+1

Element是否在實際代碼中有動態分配的成員?因爲這不會編譯(unti_16t)。 – hmjd

+0

'myElementPair'看起來像什麼?是什麼東西像'std :: make_pair(element.getId(),element)'?嘗試'myMAP.insert(std :: make_pair(element.getId(),element));' – andre

+0

對不起,是uint16_t! – Safari

回答

0

我意識到你給了一段代碼,但有些東西看起來很可疑 - 爲什麼不試試呢?

void loadElement() { 
    std::vector<Element> theVector = ConfigManager::getInstance().load(); 

    for(unsigned i = 0; i< theVector.size(); i++) { 
    // Use the el local variable instead of "element" 
    Element& el = theVector.at(i); 
    // Use operator[] instead - does a look up and 
    // creates element automagically. 
    myMAP[el.getId()] = el; 
    } 
} 
0
for(unsigned i = 0; i< theVector.size(); i++) 
{ 
    Element el = theVector.at(i); 
    myMAP.insert(myElementPair(element.getId(), element)); 
} 

我想你的意思是插入el,不element

myMAP.insert(myElementPair(el.getId(), el));