如何将地图移动到其他地图
How move map to other map
std::map<long long, std::unique_ptr<A>> listOf1;
std::map<long long, std::unique_ptr<A>> listOf2;
如何将 listOf1 添加到 listOf2?可能这很棘手,因为价值是unique_ptr。诺莫尔解决方案:
listOf2.insert(listOf1.begin(), listOf1.end());
不起作用并给出错误
严重性代码说明项目文件行源抑制状态 错误 C2280 'std::p air::p air(const std::p air &(':尝试引用已删除的函数 c:\Program Files (x86(\Microsoft Visual Studio 14.0\VC\include\xmemory0 737 Build
你可能想要:
listOf2.insert(std::make_move_iterator(listOf1.begin()),
std::make_move_iterator(listOf1.end()));
listOf1.clear();
如果您有实现 C++17 节点句柄接口的标准库实现,则可以使用 map::merge
函数将节点从一个map
拼接到另一个。
map::insert
的好处是,映射不会移动构造元素,而是通过简单地复制一些内部指针来转移节点的所有权。
#include <map>
#include <iostream>
#include <memory>
struct A
{};
int main()
{
std::map<long long, std::unique_ptr<A>> listOf1;
std::map<long long, std::unique_ptr<A>> listOf2;
listOf1[10] = std::make_unique<A>();
listOf1[20] = std::make_unique<A>();
listOf1[30] = std::make_unique<A>();
listOf2[30] = std::make_unique<A>();
listOf2[40] = std::make_unique<A>();
listOf1.merge(listOf2);
for(auto const& m : listOf1) std::cout << m.first << 'n';
}
现场演示
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 为什么不;名字在地图上是按顺序排列的吗
- 基于多个条件处理地图中的所有元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 在C++中将矢量转换为嵌套地图
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 如何将地图移动到其他地图
- 搜索一个数据结构,它可以像地图一样工作,也可以检索其他信息