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
。
我做错了什么?
如果我不得不从你得到的输出猜测,由任何机会是会话标记静态的ID字段?如果是这样,这就会表现为你在这里看到的行为。特别是,如果该字段是静态的,那么每次创建和更新新会话的ID时,您将覆盖跨所有session对象共享的ID字段,并且只有最后一个session ID将保留。
如果我完全错了,让我知道,我会删除这个答案。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶