unordered_multimap在C++ STL中的rehash()函数

unordered_multimap在C++ STL中的rehash()函数

unordered_multimap::rehash(N) 是C++ STL中的内置函数,它将容器中的桶数设置为N或更多。如果N大于容器中当前的桶数(bucket_count),则会强制重新散列(rehash)。

新的桶数可以等于或大于N。如果n低于容器中当前的桶数(bucket_count),则该函数可能对桶数没有影响,也可能不强制重新散列。

重新散列是哈希表的重建:容器中的所有元素按照它们的哈希值重排到新的桶集合中。这可能会改变容器中元素的迭代顺序,虽然具有等效键(key)的元素的相对顺序得到保留。 当其负载因子(load factor)在操作中即将超过其max_load_factor时,容器会自动执行重新散列。通过调用rehash来为哈希表保留一定数量的桶(minimum amount of buckets),我们可以避免容器扩展引起多次重新散列的情况.

语法:

unordered_multimap_name.rehash(N)

参数: 该函数接受一个必选参数 N ,它指定容器哈希表的最小桶数。

返回值: 该函数不返回任何值。

下面的程序说明了上面的函数:

程序1:

// C++ program to illustrate the
// unordered_multimap::rehash()
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
  
    // 声明
    unordered_multimap<int, int> sample1, sample2;
  
    // sample1大小被保留,以容纳至少一个元素的桶
    sample1.rehash(1);
  
    // 在sample1中插入键和元素
    sample1.insert({ 10, 100 });
    sample1.insert({ 50, 500 });
  
    // 在sample1中插入键和元素

    // sample2大小被保留,以容纳至少三个元素的桶
    sample2.rehash(3);
  
    sample2.insert({ 20, 200 });
    sample2.insert({ 30, 300 });
    sample2.insert({ 30, 150 });
  
    cout << "Sample1的大小为: " << sample1.size();
  
    cout << "\nSample1的键和元素为:";
    for (auto it = sample1.begin(); it != sample1.end(); it++) {
        cout << "{" << it->first << ", " << it->second << "} ";
    }
  
    cout << "\n\nSample2的大小为: " << sample2.size();
  
    cout << "\nSample2的键和元素为:";
    for (auto it = sample2.begin(); it != sample2.end(); it++) {
        cout << "{" << it->first << ", " << it->second << "} ";
    }
  
    return 0;
}
Sample1的大小为:2
Sample1的键和元素为:{50, 500} {10, 100} 

Sample2的大小为:3
Sample2的键和元素为:{30, 150} {30, 300} {20, 200}

程序2:

// C++程序举例说明
// unordered_multimap::rehash()
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
  
    // 声明
    unordered_multimap<char, char> sample1, sample2;
  
    // sample1大小被保留到
    // 桶至少包含一个元素
    sample1.rehash(1);
  
    // 在sample1中插入键和元素
    sample1.insert({ 'a', 'A' });
    sample1.insert({ 'g', 'G' });
  
    // 在sample2中插入键和元素
    // sample2大小被保留到
    // 桶至少包含三个元素
    sample2.rehash(3);
  
    sample2.insert({ 'b', 'B' });
    sample2.insert({ 'c', 'C' });
    sample2.insert({ 'd', 'D' });
  
    cout << "Sample1的大小是:" << sample1.size();
  
    cout << "\nSample1的键和元素是:";
    for (auto it = sample1.begin(); it != sample1.end(); it++) {
        cout << "{" << it->first << ", " << it->second << "} ";
    }
  
    cout << "\n\nSample2的大小是:" << sample2.size();
  
    cout << "\nSample2的键和元素是:";
    for (auto it = sample2.begin(); it != sample2.end(); it++) {
        cout << "{" << it->first << ", " << it->second << "} ";
    }
  
    return 0;
}
Sample1的大小是:2
Sample1的键和元素是:{g, G} {a, A} 

Sample2的大小是:3
Sample2的键和元素是:{d, D} {c, C} {b, B}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程