7

是否可以定义固定大小unordered_map

查看成员函数,没有resize()类似于std::vectorand std::list。此外,谷歌没有帮助我。

4

3 回答 3

9

是的,这是可能的,但 STL 中没有这样的映射。您可以做的是编写自己的类,其中包含一个并使用您自己std::array< std::pair<Key, Value>, N>提供大部分功能。如果您使用 a作为数据成员,您甚至可以拥有一个仅显式扩展表的函数,而不是在.find()insert()std::hashstd::vector< std::pair<Key, Value> >resize()insert()

要实现的重要一点是,您还需要提供一种迭代各种元素的方法,以满足所有容器要求。通常这是通过在所有存储元素上实现链接列表的辅助数据来完成的。

但是,您需要解决的一个问题是,如果您的阵列已满,您使用哪种替换策略来替换项目。使用std::unorderd_map所谓的链接,每个条目都有一个动态大小的(至少有前向迭代,所以至少相当于forward_list)。大多数国际象棋程序都有一个固定大小的哈希表和一个替换策略,如果一个特定的表条目已经被占用,则总是替换一个项目。

于 2013-01-19T19:19:28.273 回答
0

如果您的目标是将 map 调整为已知大小以避免进一步可能低效的重新散列,您可以使用std::unordered_map:: reserve. 它将设置桶的数量,因此地图可以根据负载因子包含给定的元素数量。

于 2013-01-19T19:29:18.180 回答
0

从逻辑上讲,map 不可能resize()像其他序列容器那样具有成员函数。这是一张地图,它的每一个键都必须是唯一的。如果您将其调整到某个大小,则它必须用一些(默认)值填充创建的条目。它应该为键生成什么值?它将如何确保密钥的唯一性?该决定不能由地图做出,因此它没有resize()成员函数。

于 2013-01-19T19:21:01.217 回答