📜  C++ STL中的multimap :: emplace()(1)

📅  最后修改于: 2023-12-03 14:59:46.591000             🧑  作者: Mango

C++ STL中的multimap :: emplace()

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容器中存储了我们添加的所有元素,并按键值自动进行了排序。

注意事项
  • multimap容器中的元素是按照键值进行排序的。
  • 在使用emplace()函数添加元素时,需要注意所添加元素的类型。C++11的变长模板特性能够自动推导类型,如果类型推导错误,将可能导致不可预期的结果。
  • 如果要在multimap容器中插入已经构造好的对象,应该使用insert()函数而不是emplace()函数。