📅  最后修改于: 2023-12-03 14:59:46.591000             🧑  作者: Mango
C++中的STL库提供了multimap容器,是一个基于红黑树实现的关联式容器,与map容器类似,但可以存储相同关键字的多个值。multimap容器提供了一些方便的成员函数,其中一个是emplace()
。
emplace()
函数是C++11新特性,它可以替代insert()
函数。emplace()
函数会在multimap容器中直接构造一个元素,而不是将一个已经构造好的元素复制或插入到容器中。换句话说,emplace()
函数可以避免不必要的拷贝操作,提高程序的执行效率。
template <class... Args>
iterator emplace (Args&&... args);
emplace()
接受任意数量的参数,根据参数推断出需要构造的元素类型,并在multimap容器中构造一个元素。返回一个指向构造出的新元素的迭代器。
args
: 需要构造元素的参数列表#include <iostream>
#include <map>
int main() {
std::multimap<char, int> mm;
mm.emplace('a', 1);
mm.emplace('b', 2);
mm.emplace('a', 3);
mm.emplace('c', 4);
std::cout << "Multimap contains:\n";
for (auto& i: mm) {
std::cout << i.first << " => " << i.second << std::endl;
}
return 0;
}
输出结果:
Multimap contains:
a => 1
a => 3
b => 2
c => 4
示例代码中,我们构造了一个multimap容器,并使用emplace()
函数分别向容器中添加了四个元素。这里注意到,第一个和第三个元素使用了相同的关键字'a'。multimap容器支持存储相同关键字的多个值,因此这两个元素都被添加到了容器中。
最后,我们遍历容器中的所有元素,并输出它们的键和值。可以看到,multimap容器中存储了我们添加的所有元素,并按键值自动进行了排序。
emplace()
函数添加元素时,需要注意所添加元素的类型。C++11的变长模板特性能够自动推导类型,如果类型推导错误,将可能导致不可预期的结果。insert()
函数而不是emplace()
函数。