【发布时间】:2013-06-26 19:04:42
【问题描述】:
我对来自 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 会复制元素吗?
【问题讨论】:
-
Element在实际代码中是否有动态分配的成员?因为这不会编译(unti_16t)。
-
myElementPair看起来像什么?是像std::make_pair(element.getId(), element)这样的东西吗?试试myMAP.insert(std::make_pair(element.getId(), element)); -
抱歉是uint16_t!!
-
Element el = theVector.at(i); myMAP.insert(myElementPair(element.getId(), element));使 no 有意义。如果您想要 real 答案,请发布一些 real 代码! -
myElementPair 是这样定义的:typedef std::pair