map
容器的成员函数 emplace()
可以在适当的位置直接构造新元素,从而避免复制和移动操作。
只有当容器中现有元素的键与这个元素的键不同时,才会构造这个元素。
成员函数 emplace()
和 insert()
返回的 pair
对象提供的指示相同。
pair
的成员变量 first
是一个指向插入元素或阻止插入的元素的迭代器;
成员变量 second
是个布尔值,如果元素插入成功,second
就为 true
。
map<Name, size_t> people;
auto pr = people.emplace(Name{ "Dan", "Druff" }, 77);
auto iter = people.emplace_hint(pr.first, Name{ "Cal", "Cutta" }, 62);
#include <iostream>
#include <utility>
#include <string>
#include <map>
using namespace std;
int main() {
map<string, string> m;
// uses pair's move constructor
m.emplace(make_pair(string("a"), string("a"))); // a => a
// uses pair's converting move constructor
m.emplace(make_pair("b", "abcd")); // b => abcd
// uses pair's template constructor
m.emplace("d", "ddd"); // d => ddd
// uses pair's piecewise constructor
m.emplace(piecewise_construct,
forward_as_tuple("c"),
forward_as_tuple(10, 'c')); // c => cccccccccc
// as of C++17, m.try_emplace("c", 10, 'c'); can be used
for (const auto& p : m) {
cout << p.first << " => " << p.second << '\n';
}
}