C++ STL 中 unordered_multimap max_load_factor() 函数
在 C++ 中,unordered_multimap
是一种容器,用于存储键-值对。与其他容器一样,unordered_multimap
也提供了许多有用的功能和函数,其中一个就是 max_load_factor()
。这个函数决定了 unordered_multimap
的最大负载因子,即决定桶在存储键-值对时可以达到的最大填充程度。
unordered_multimap
作为一种容器,unordered_multimap
可以存储多组键-值对。这样的存储形式灵活且易于调用,让我们看一个具体的例子:
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main() {
unordered_multimap<string, int> umap = {{"apple", 1}, {"banana", 2}, {"apple", 3}};
umap.insert({"apple", 4});
for (auto it = umap.begin(); it != umap.end(); it++) {
cout << "Key: " << it->first << "; Value: " << it->second << endl;
}
return 0;
}
输出结果:
Key: apple; Value: 1
Key: apple; Value: 3
Key: apple; Value: 4
Key: banana; Value: 2
如上代码,我们定义了一个 unordered_multimap
,并将键-值对放入其中。我们可以调用 insert()
向容器中插入新的键-值对,这里插入 {“apple”, 4}
。
接下来我们使用循环遍历输出所有的键-值对。这里,我们可以看到输出的结果中有三组键值为 “apple”的键值对。
这是因为 unordered_multimap
允许键值重复。相对于 map
来说,unordered_multimap
有更高的插入与查找效率。
max_load_factor()
max_load_factor()
是 unordered_multimap
的一个成员函数,其定义如下:
void max_load_factor(float z);
该函数接受一个浮点数参数z
,它指定了unordered_multimap
的负载因子。默认情况下,max_load_factor()
为 1.0
。当max_load_factor()
内容不断插入时,负载因子就会增大。当负载因子大于该值时,unordered_multimap
就会重新分配空间,即将容器扩大。
我们可以发现,max_load_factor()
对于存储数据的容器有很大的影响。设置一个合理的最大负载因子可以提高容器的效率,在插入数据时可以减少扩大容器空间的次数,然后提高空间使用效率。
下面是一个使用 max_load_factor()
的示例代码:
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main() {
unordered_multimap<string, int> umap = {{"apple", 1}, {"banana", 2}, {"apple", 3}};
umap.insert({"apple", 4});
cout << "Max load factor: " << umap.max_load_factor() << endl;
cout << "Bucket count: " << umap.bucket_count() << endl;
umap.max_load_factor(0.5);
cout << "Max load factor: " << umap.max_load_factor() << endl;
cout << "Bucket count: " << umap.bucket_count() << endl;
return 0;
}
输出结果:
Max load factor: 1
Bucket count: 7
Max load factor: 0.5
Bucket count: 14
从上面的输出结果中,我们可以看到初始值的最大负载因子为 1.0
,桶的数量为 7
。max_load_factor(0.5)
将最大负载因子减半,使得桶的数量增加到了14
。这是因为容器必须根据负载因子和数据元素的数量来重新计算桶的数量,unordered_multimap
在实现时会选择相应的负载因子来保证空间、时间的达成平衡。
当然,我们不应该过度依赖最大负载因子的设置,过高的负载因子会导致桶的填充过度,从而降低 unordered_multimap
的效率。因此,在实际使用中,需要结合实际情况和使用经验来设置合理的最大负载因子值。
结论
C++ STL 中 unordered_multimap
是一种灵活的容器,能够存储多组键-值对。最大负载因子可以确定容器的最大填充程度,从而达到空间、时间效率的平衡。但在实际使用中,过高的负载因子会导致桶的填充过度,不宜过度依赖设置最大负载因子。在实际使用中需要结合实际情况和使用经验来设置合理的最大负载因子值。