[英]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.