我对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
是否会复制元素?
答案 0 :(得分: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;
}
}
答案 1 :(得分: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));