0

我对来自 STL 的地图有疑问。我有我的班级元素:

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复制元素吗?

4

2 回答 2

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;
  }
}
于 2013-06-26T19:13:55.323 回答
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));
于 2013-06-26T19:25:42.777 回答