簡體   English   中英

C ++ std :: unordered_map

[英]C++ std::unordered_map

我正在使用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

我究竟做錯了什么?

如果我不得不從您輸出的輸出中猜測,那么Session的ID字段是否標記為靜態? 如果是這樣,這將完全表現出你在這里看到的行為。 特別是,如果字段是靜態的,那么每次創建和更新新會話的ID時,您將覆蓋所有Session對象共享的ID字段,並且只有最后一個會話ID將保持不變。

如果我完全錯了,請告訴我,我會刪除這個答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM