【发布时间】:2013-12-09 03:51:11
【问题描述】:
我想使用类似于 std::map 的结构,但没有排序,我不需要排序,而且我的密钥非常大,所以“小于”比较需要时间。 所以,我看到了 unordered_map 但它有一个哈希模板参数,那么,如何在没有哈希的情况下使用 unordered_map?我真的需要构建自己的容器吗?
这个问题也适用于 std::set。
编辑 一些答案建议创建我自己的哈希,但我不能这样做,我应该在这里指定它。密钥包含浮点数据,因此散列它是一个非常糟糕的主意。我需要直接比较 (std::equal_to)。
【问题讨论】:
-
你希望这个容器能做什么?
std::hash_map等提供基于散列的快速查找。如果您不想要散列,那么您将无法快速查找,或者您必须提供一些其他机制。 -
听起来您想将键映射到某个值。您如何设想完成映射?
std::map<...>使用小于关系来定位对象。排序只是脱离了它的内部结构。无序容器使用散列而不是排序来定位对象。如果你不想要,你需要描述你想象的钥匙是如何被发现的...... -
std::unordered_map可能非常适合您的要求。考虑专注于如何成功地将您自己的类型用作容器键。 -
@Captain Obvlious 实际上我已经“找到”了如何将我的类型作为键。在 std::map 的情况下, operator