C++ 固定大小无序地图,如何定义?

C++ 固定大小无序地图,如何定义?,c++,unordered-map,fixed-size-types,C++,Unordered Map,Fixed Size Types,是否可以定义一个固定大小的无序地图 查看成员函数,没有类似于std::vector和std::list的resize()。另外,谷歌也没有帮我。是的,这是可能的,但STL中没有这样的地图。您可以编写自己的类,其中包含std::array,并使用std::hash自己提供大部分find(),insert()功能。如果使用std::vector作为数据成员,您甚至可以使用resize()函数来仅显式扩展表,而不是在insert()之后隐式扩展表 需要认识到的一件重要事情是,您还需要提供一种迭代各种元

是否可以定义一个固定大小的无序地图


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

是的,这是可能的,但STL中没有这样的地图。您可以编写自己的类,其中包含
std::array
,并使用
std::hash
自己提供大部分
find()
insert()
功能。如果使用
std::vector
作为数据成员,您甚至可以使用
resize()
函数来仅显式扩展表,而不是在
insert()之后隐式扩展表

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


但是,您需要解决的一个问题是,如果阵列已满,您将使用哪个替换策略来替换项目。
std::unorderd\u映射
使用所谓的链接,每个条目都有一个动态大小的bucket(至少有向前迭代,因此至少相当于
向前列表
)。大多数都有一个固定大小的哈希表,带有替换策略,以便在特定表项已被占用时始终替换项。

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

如果您的目标是将地图调整为已知大小,以避免进一步的可能无效的重新灰化,则可以使用。它将设置存储桶的数量,因此map可以根据负载系数包含给定数量的元素。

这只会提高效率,但如果继续添加元素,表仍将动态调整自身大小。@rhalbersma,是的,但我认为,TS可能只是想在知道元素的精确计数时优化表填充。实际上,我正在寻找一个固定大小的地图。因此,需要一个替代政策