C ++ std :: unordered_map

时间:2011-08-21 23:13:59

标签: c++

我正在使用std::unordered_map,我想使用它来存储指向我使用new动态创建的对象的指针。

我可以很好地创建对象并且插入方法成功;但是,当我尝试使用索引从地图中解析特定对象时,列表中的所有项目都会映射到我在地图中指向的最后一个项目。

typedef std::unordered_map<__int64, Session*> HashDict;
HashDict dict;

void Sessions::Insert()
{
  Session* newSession = new Session;
  newSession->setId(sessionCounter++);
  dict.insert(HashDict::value_type(newSession->Id(), newSession));
}

void Sessions::Find(__int64 id)
{
  HashDict::iterator it = dict.find(id);

  if(it != dict.end())
  {
    Session* s = it->second;
    std::cout << "Search for: " << id << std::setw(3) << 
                 " found @ location: "  << it->second << std::setw(3) << 
                 " with value: " <<  s->Id() << std::endl;
  }
}

001D4F50    0
001D5038    1
001D50D0    2
001D5378    3
001D5410    4
001D54A8    5
001D5540    6
001D55D8    7
001D5670    8
001D4E50    9
Search for: 5 found @ location: 001D54A8 with value: 9

请注意5指向5处的位置(来自插页),但是它表示值为9

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果我不得不从您输出的输出中猜测,那么Session的ID字段是否标记为静态?如果是这样,这将完全表现出你在这里看到的行为。特别是,如果该字段是静态的,那么每次创建和更新新会话的ID时,您将覆盖所有Session对象共享的ID字段,并且只有最后一个会话ID将保持不变。

如果我完全错了,请告诉我,我会删除这个答案。