c++11 - 仅使用带有键的 unordered_map 来存储指针(忽略值)
问题描述
我正在实现一种算法,该算法检查网格中的节点是否具有特定值。为了存储我已经检查过的节点的信息,我想使用一个 unordered_map,并将指向该节点的指针作为键。然后我可以简单地使用 umap.find(pointer) 来查看节点是否已被检查并跳过它。这样我可以在 O(n) 时间内完成它。
但是我不需要实际存储地图的值。密钥本身就是足够的信息。那么 std::unordered_map 甚至是正确的解决方案吗?如果是这样,我应该为“价值”字段最大化性能吗?我有一个 32 位嵌入式系统,所以我想把 uint32_t 或 uint_fast32_t 放在那里。
tl;博士:
- std::unordered_map 是存储没有值的键的正确工具吗?
- 本机哈希函数是否适用于指针?或者你会建议一个不同的哈希算法?
- 如果使用 std::unordered_map 来优化性能,我应该将什么作为地图的“价值”?
解决方案
是
std::unordered_map
存储没有值的键的正确工具吗?
我会std::unordered_set
在这些情况下使用 a 。
本机哈希函数是否适用于指针?
是的。它很可能只是从指针到std::size_t
.
如果使用 std::unordered_map 来优化性能,我应该将什么作为地图的“价值”?
如果您使用 astd::unordered_set
代替,则没有值,只有指针。
推荐阅读
- soap - 从 pl/sql 构建 Soap Security 标头
- python - 从 MarketWatch 获取数据
- c# - How to Convert User input to Encoder value type
- swift - 如何检查屏幕是否有关联的扬声器
- javascript - 如何正确地将jquery div附加到html
- flutter - 如何在flutter中实现循环页面动画
- javascript - 数据表未对齐,直到以模态排序
- javascript - 将此传递给子函数
- python - 由于数据值似乎太小,无法使用 lmfit 拟合高斯拟合
- macos - .zshrc JAVA_HOME 在新终端上返回空白,但在显式源 mac OS (catalina) 时有效