在C++ STL中的unordered_multimap.bucket_count()函数

在C++ STL中的unordered_multimap.bucket_count()函数

unordered_multimap是C++ STL中一个非常有用的容器,它允许我们在O(1)的时间复杂度内查找和插入元素,而且还可以存储多个相同的键值。其中,bucket_count()函数是unordered_multimap的一个成员函数,用于获取unordered_multimap中存储桶的数量。

什么是unordered_multimap

unordered_multimap是一个key和value都可以相同的哈希表,通过哈希值来快速查找元素。和map相比,unordered_multimap的插入和查找速度更快,但是会牺牲一些排序能力。

下面是一个用unordered_multimap实现的简单例子,我们将一些人名和他们的年龄存储在unordered_multimap中,然后通过名字查找对应的年龄。

#include <iostream>
#include <unordered_map>
#include <string>

int main()
{
    std::unordered_multimap<std::string, int> um = {{"Alice", 20}, {"Bob", 25}, {"Cindy", 20}, {"Bob", 30}};

    std::string name = "Bob";
    auto itr = um.equal_range(name);
    for(auto it = itr.first; it != itr.second; it++)
        std::cout << it->first << ": " << it->second << std::endl;

    return 0;
}

上面的代码中,我们使用unordered_multimap来存储人名和年龄信息,其中Bob有两条记录,所以需要用到equal_range函数来查找所有的记录并输出对应的年龄。

bucket_count()函数是什么

unordered_multimap中的元素使用哈希值进行存储,每个存储的元素被分配到一个桶(bucket)中,桶是一个存储元素的容器。bucket_count()函数用来返回unordered_multimap中当前存储桶的数量。

下面是使用bucket_count()函数获取存储桶数量的示例代码。

#include <iostream>
#include <unordered_map>
#include <string>

int main()
{
    std::unordered_multimap<std::string, int> um = {{"Alice", 20}, {"Bob", 25}, {"Cindy", 20}, {"Bob", 30}};

    std::cout << "unordered_multimap has " << um.bucket_count() << " buckets." << std::endl;

    return 0;
}

在上面的示例中,我们打印了unordered_multimap中存储桶的数量。

bucket_index()函数是什么

unordered_multimap中的每个桶都有一个索引(index),bucket_index(key)函数用来返回key所对应的桶的索引。

下面是使用bucket_index()函数获取桶编号的示例代码。

#include <iostream>
#include <unordered_map>
#include <string>

int main()
{
    std::unordered_multimap<std::string, int> um = {{"Alice", 20}, {"Bob", 25}, {"Cindy", 20}, {"Bob", 30}};

    std::string name = "Bob";
    std::cout << "key " << name << " is in bucket " << um.bucket_index(name) << std::endl;

    return 0;
}

在上面的示例中,我们输入了一个名字Bob,并且使用bucket_index()函数获取了Bob所在的桶的索引。

结论

整个文章我们介绍了unordered_multimap的用法以及其中的bucket_count()bucket_index()两个函数。在使用unordered_multimap时,我们可以利用桶和哈希值来快速的对元素进行查找和插入,这是它的一个重要优势。当我们需要知道unordered_multimap中存储桶的数量或某个key所在的桶的索引时,我们可以使用bucket_count()bucket_index()这两个函数方便的获取相关信息。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程