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;
   }
}

2 番目の要素 (myMAP には 2 つの要素が含まれています) でクラッシュが発生し、最初のプリントには奇妙な値の ID が含まれています。何が問題なのか教えていただけますか?この方法で要素を挿入すると、要素std::mapのコピーが作成されますか?

4

2 に答える 2

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 に答える
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 に答える