在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