在C++ STL中使用unordered_multiset::rehash()函数

在C++ STL中使用unordered_multiset::rehash()函数

unordered_multiset::rehash() 是C++ STL中的一个内置函数,它设置容器中的桶的数量为N或更多。如果N大于容器中当前的桶数(bucket_count),则会强制执行重新散列。新桶的数量可以等于或大于N。 如果n小于容器中当前的桶数(bucket_count),则该函数可能对桶计数没有影响并且可能不会强制重新散列。

重新散列是哈希表的重构:将容器中的所有元素按其哈希值重新排列到新的一组桶中。这可能会改变容器内元素的迭代顺序,尽管维护具有等效键的元素的相对顺序。每当容器的负载因子将超过其最大负载因子时,容器会自动执行重新散列操作。通过调用rehash来预留哈希表中一定数量的桶,我们避免了容器的扩展可能导致的多次重新散列操作。

语法:

unordered_multset_name.rehash(N);

参数: 该函数只接受一个以下列出的参数:

  • count :新的桶数。

返回值: none(void类型函数)

下面的程序演示了上述方法:

示例 1:

//C++程序演示
//unordered_multiset::rehash()
#include <iostream>
#include <unordered_set>
using namespace std;

//在multiset中显示值的函数
void display(unordered_multiset<int> s)
{
     for (auto it = s.begin(); it != s.end(); it++)
         cout << *it << endl;
}

int main()
{
     //声明
     unordered_multiset<int> s1;

     //插入初始值
     s1.insert(1);
     s1.insert(2);
     s1.insert(3);

     //显示初始值
     cout << "初始值为:\n";
     display(s1);
     cout << endl;

     //显示初始参数
     cout << "初始参数为:\n";
     cout << "bucketcount() = " << s1.bucket_count() << endl;
     cout << "load factor = " << s1.load_factor() << endl;
     cout << "Max_load_factor = " << s1.max_load_factor() << endl;
     cout << endl;

     //执行重新散列
     s1.rehash(200);

     //显示最终参数
     cout << "最终参数为:\n";
     cout << "bucketcount() = " << s1.bucket_count() << endl;
     cout << "load factor = " << s1.load_factor() << endl;
     cout << "Max_load_factor = " << s1.max_load_factor() << endl;
     cout << endl;

     return 0;
}  

输出:

初始值为:
3
1
2

初始参数为:
bucketcount() = 7
load factor = 0.428571
Max_load_factor = 1

最终参数为:
bucketcount() = 211
load factor = 0.014218
Max_load_factor = 1

程序2:

//C++ program to illustrate
//unordered_multiset::rehash()
#include <iostream>
#include <unordered_set>
using namespace std;

//在multiset中显示值的函数
void display(unordered_multiset<int> s)
{
     for (auto it = s.begin(); it != s.end(); it++)
         cout << *it << endl;
}

int main()
{
     //声明
     unordered_multiset<int> s;

     //插入值
     s.insert(1);
     s.insert(2);
     s.insert(2);
     s.insert(4);

     //执行重新散列
     s.rehash(5);

     //显示值
     cout << "Multiset中的值为:\n";
     display(s);
     cout << endl;

     //显示参数
     cout << "参数为:\n";
     cout << "bucketcount() = " << s.bucket_count() << endl;
     cout << "load factor = " << s.load_factor() << endl;
     cout << "Max_load_factor = " << s.max_load_factor() << endl;
     cout << endl;

     return 0;
}  

输出:

Multiset中的值为:
1
2
2
4

参数为:
bucketcount() = 5
load factor = 0.8
Max_load_factor = 1
// C++程序演示
// 无序多集合的rehash()函数
#include <iostream>
#include <unordered_set>
using namespace std;
 
// 展示多集合中的值的函数
void display(unordered_multiset<char> s)
{
    for (auto it = s.begin(); it != s.end(); it++)
        cout << *it << endl;
}
int main()
{
    // 声明
    unordered_multiset<char> s1;
 
    // 插入初始值
    s1.insert('a');
    s1.insert('b');
    s1.insert('c');
 
    // 显示初始值
    cout << "初始值为:\n";
    display(s1);
    cout << endl;
 
    // 显示初始参数
    cout << "初始参数为:\n";
    cout << "bucketcount() = " << s1.bucket_count() << endl;
    cout << "负载因子为= " << s1.load_factor() << endl;
    cout << "最大负载因子为= " << s1.max_load_factor() << endl;
    cout << endl;
 
    // 执行rehash操作
    s1.rehash(200);
 
    // 显示最终参数
    cout << "最终参数为:\n";
    cout << "bucketcount() = " << s1.bucket_count() << endl;
    cout << "负载因子为= " << s1.load_factor() << endl;
    cout << "最大负载因子为= " << s1.max_load_factor() << endl;
    cout << endl;
     
    return 0;
}  

输出:

初始值为:
c
a
b

初始参数为:
bucketcount() = 7
负载因子为= 0.428571
最大负载因子为= 1

最终参数为:
bucketcount() = 211
负载因子为= 0.014218
最大负载因子为= 1

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程