📅  最后修改于: 2023-12-03 14:59:46.982000             🧑  作者: Mango
unordered_multiset
是C++ STL库中的一个关联容器,定义在<unordered_set>
头文件中。它与set
相似,也是用来存储一组不重复的元素的容器,但是与set
不同的是,unordered_multiset
里的元素是无序的,且允许出现重复元素。
在unordered_multiset
中,rehash()
函数是用来重新分配容器的桶的数量的。在容器中存储元素时,需要将元素通过哈希函数进行散列,然后存放在相应的桶中。如果桶的数量太少,就容易发生哈希冲突,导致元素的查找、插入等操作的时间复杂度变高。因此,rehash()
函数可以用来提高容器的性能。
rehash()
函数的语法如下:
void rehash( size_type n );
其中,n
是重新分配的桶的数量。它的默认值为0
,表示重新分配到当前元素数量的两倍。
下面是一个使用unordered_multiset
的例子,其中使用了rehash()
函数:
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main()
{
unordered_multiset<string> myset = {"apple", "banana", "orange"};
// 输出当前桶的数量
cout << "桶的数量:" << myset.bucket_count() << endl;
// 使用rehash()函数重新分配桶
myset.rehash(6);
// 输出重新分配后的桶的数量
cout << "重新分配后的桶的数量:" << myset.bucket_count() << endl;
// 插入元素
myset.insert("pear");
myset.insert("peach");
// 输出元素
for(auto elem : myset)
cout << elem << " ";
return 0;
}
输出:
桶的数量:11
重新分配后的桶的数量:6
pear peach orange apple banana banana banana
在上面的例子中,首先初始化了一个unordered_multiset
容器,并输出了当前桶的数量。然后使用rehash()
函数将桶的数量重新分配为6
,并输出了重新分配后的桶的数量。最后插入了两个元素,输出了容器中的所有元素。可以发现,在重新分配桶之后,容器中的元素变得更加均匀了。