在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()
这两个函数方便的获取相关信息。