是否可以定义固定大小unordered_map
?
查看成员函数,没有resize()
类似于std::vector
and std::list
。此外,谷歌没有帮助我。
是否可以定义固定大小unordered_map
?
查看成员函数,没有resize()
类似于std::vector
and std::list
。此外,谷歌没有帮助我。
是的,这是可能的,但 STL 中没有这样的映射。您可以做的是编写自己的类,其中包含一个并使用您自己std::array< std::pair<Key, Value>, N>
提供大部分功能。如果您使用 a作为数据成员,您甚至可以拥有一个仅显式扩展表的函数,而不是在.find()
insert()
std::hash
std::vector< std::pair<Key, Value> >
resize()
insert()
要实现的重要一点是,您还需要提供一种迭代各种元素的方法,以满足所有容器要求。通常这是通过在所有存储元素上实现链接列表的辅助数据来完成的。
但是,您需要解决的一个问题是,如果您的阵列已满,您使用哪种替换策略来替换项目。使用std::unorderd_map
所谓的链接,每个条目都有一个动态大小的桶(至少有前向迭代,所以至少相当于forward_list
)。大多数国际象棋程序都有一个固定大小的哈希表和一个替换策略,如果一个特定的表条目已经被占用,则总是替换一个项目。
如果您的目标是将 map 调整为已知大小以避免进一步可能低效的重新散列,您可以使用std::unordered_map:: reserve
. 它将设置桶的数量,因此地图可以根据负载因子包含给定的元素数量。
从逻辑上讲,map 不可能resize()
像其他序列容器那样具有成员函数。这是一张地图,它的每一个键都必须是唯一的。如果您将其调整到某个大小,则它必须用一些(默认)值填充新创建的条目。它应该为键生成什么值?它将如何确保密钥的唯一性?该决定不能由地图做出,因此它没有resize()
成员函数。