📜  C++ STL中的unordered_multiset rehash()函数(1)

📅  最后修改于: 2023-12-03 14:59:46.982000             🧑  作者: Mango

C++ STL中的unordered_multiset rehash()函数

1. 介绍

unordered_multiset是C++ STL库中的一个关联容器,定义在<unordered_set>头文件中。它与set相似,也是用来存储一组不重复的元素的容器,但是与set不同的是,unordered_multiset里的元素是无序的,且允许出现重复元素。

unordered_multiset中,rehash()函数是用来重新分配容器的桶的数量的。在容器中存储元素时,需要将元素通过哈希函数进行散列,然后存放在相应的桶中。如果桶的数量太少,就容易发生哈希冲突,导致元素的查找、插入等操作的时间复杂度变高。因此,rehash()函数可以用来提高容器的性能。

2. 语法

rehash()函数的语法如下:

void rehash( size_type n );

其中,n是重新分配的桶的数量。它的默认值为0,表示重新分配到当前元素数量的两倍。

3. 使用示例

下面是一个使用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,并输出了重新分配后的桶的数量。最后插入了两个元素,输出了容器中的所有元素。可以发现,在重新分配桶之后,容器中的元素变得更加均匀了。