当前位置:  开发笔记 > 编程语言 > 正文

如何在std :: map中创建新条目而不复制条目值 - 没有指针

如何解决《如何在std::map中创建新条目而不复制条目值-没有指针》经验,为你挑选了1个好方法。

我有一张地图:

std::map

MyDataContainer一些classstruct(无所谓).现在我想创建一个新的数据容器.假设我想使用默认构造函数来实现它:

// This is valid, MyDataContainer doesn't need constructor arguments
MyDataConstructor example;
// The map definition
std::map map;
std::string name("entry");
// This copies value of `example`
map[name] = example;
// Below, I want to create entry without copy:
std::string name2 = "nocopy"
// This is pseudo-syntax
map.createEmptyEntry(name2);

有没有办法做到这一点?当我想在地图中初始化它时跳过创建辅助变量?是否有可能使用构造函数参数?

我认为这个问题也适用于其他std容器,比如stdvector或stdlist.



1> Kerrek SB..:

用途emplace:

#include 
#include 
#include 

std::map m;

m.emplace(std::piecewise_construct,
          std::forward_as_tuple("nocopy"),
          std::forward_as_tuple());

这概括为新键值和映射值的任意consructor参数,您只需将其放入相应的forward_as_tuple调用中.

在C++ 17中,这有点容易:

m.try_emplace("nocopy"  /* mapped-value args here */);

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有