📅  最后修改于: 2023-12-03 14:39:52.424000             🧑  作者: Mango
在C++的STL(标准模板库)中,unordered_multimap是一种无序关联容器,可以存储键-值对。这里的“无序”指的是元素在容器中的位置不受元素的关键字顺序的限制。
unordered_multimap容器通过哈希表实现,因此能够提供常数时间复杂度的插入、查找和删除操作。
reserve()函数是unordered_multimap容器提供的一个成员函数,它的作用是准备好能够保存指定数量元素的容量。当添加更多元素时,这些元素将不会引发容器重新分配存储空间的操作,从而提高了程序的效率。
使用reserve()函数的语法如下所示:
void reserve (size_t n);
n参数表示容器的容量大小,单位为元素数。如果希望unordered_multimap容器能够容纳至少n个元素,则应该使用reserve()函数来预分配所需的存储空间。
下面是一个简单的代码示例:
#include <iostream>
#include <unordered_map>
int main()
{
std::unordered_multimap<int, std::string> map;
map.reserve(10); // 预分配可以容纳10个元素的存储空间
for (int i = 0; i < 15; ++i)
{
map.insert(std::make_pair(i % 5, "value"));
}
std::cout << "unordered_multimap size: " << map.size() << std::endl;
return 0;
}
在代码中,我们首先创建了一个空的unordered_multimap<int, std::string>对象,然后使用reserve()函数预分配了可以容纳10个元素的存储空间。
随后,我们插入了15个元素到unordered_multimap中,这远远超过了我们之前预分配的存储空间。但是由于我们提前预留了足够的空间,程序没有触发重新分配内存的操作。
最后,输出了unordered_multimap当前的大小。
使用reserve()函数预先分配的存储空间虽然能够提高程序的效率,但是也会消耗更多的内存。因此,在调用reserve()函数之前,应该先估算出容器将要存储的元素数量,并调用reserve()函数预分配一定的存储空间。
值得一提的是,reserve()函数并不会强制要求容器必须预分配足够的存储空间。如果容器已经预分配的存储空间足够存储所有元素,那么reserve()函数将会被忽略。如果容器没有预分配足够的存储空间,那么reserve()函数将提供额外的存储空间,并确保后续插入元素时不会再次触发内存重新分配的操作。