std::map emplace示例
emplaceemplace操作是从C++11开始引入新特性,emplace操作是直接通过参数构造元素而不是拷贝元素到容器中这样可以减少拷贝从而提高性能。对于map是没有emplace_front、emplace_after、emplace_back这些操作的。std::map<Key,T,Compare,Allocator>::emplacetemplate<class...A
·
emplace
emplace操作是从C++11开始引入新特性,emplace操作是直接通过参数构造元素而不是拷贝元素到容器中这样可以减少拷贝从而提高性能。对于map是没有emplace_front、emplace_after、emplace_back这些操作的。
std::map<Key,T,Compare,Allocator>::emplace
template< class... Args > | (since C++11) | |
Inserts a new element into the container constructed in-place with the given args
if there is no element with the key in the container.
注意返回值也是一个std::pair
#include <iostream>
#include <utility>
#include <string>
#include <map>
int main()
{
std::map<std::string, std::string> m;
// uses pair's move constructor
//使用移动构造
m.emplace(std::make_pair(std::string("a"), std::string("a")));
// uses pair's converting move constructor
//使用隐式转换移动构造函数,和上一个区别是这里的“a”会隐式转换成std::string
m.emplace(std::make_pair("b", "abcd"));
// uses pair's template constructor
//使用模板构造
m.emplace("d", "ddd");
// uses pair's piecewise constructor
m.emplace(std::piecewise_construct,
std::forward_as_tuple("c"),
std::forward_as_tuple(10, 'c'));
// as of C++17, m.try_emplace("c", 10, 'c'); can be used
for (const auto &p : m) {
std::cout << p.first << " => " << p.second << '\n';
}
}
输出:
a => a b => abcd c => cccccccccc d => ddd
更多推荐
已为社区贡献1条内容
所有评论(0)