21k*_*zyd 4 c++ algorithm c++11
std::map<long long, std::unique_ptr<A>> listOf1;
std::map<long long, std::unique_ptr<A>> listOf2;
Run Code Online (Sandbox Code Playgroud)
如何将listOf1添加到listOf2?可能它很棘手,因为值是unique_ptr.Normall解决方案:
listOf2.insert(listOf1.begin(), listOf1.end());
Run Code Online (Sandbox Code Playgroud)
不起作用并给出错误
严重级代码描述项目文件行源抑制状态错误C2280'std :: pair :: pair(const std :: pair&)':尝试引用已删除的函数c:\ program files(x86)\ microsoft visual studio 14.0\vc\include\xmemory0 737 Build
Jar*_*d42 12
你可能想要:
listOf2.insert(std::make_move_iterator(listOf1.begin()),
std::make_move_iterator(listOf1.end()));
listOf1.clear();
Run Code Online (Sandbox Code Playgroud)
如果您有一个实现 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';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
713 次 |
| 最近记录: |