C++ 将唯一指针插入std::map

C++ 将唯一指针插入std::map,c++,c++17,smart-pointers,unique-ptr,unordered-map,C++,C++17,Smart Pointers,Unique Ptr,Unordered Map,在将唯一指针插入std::unordered\u映射时,我停止了操作 当我寻找答案时,我得到了一个链接: 我试过了,但对我不起作用。这是我到现在为止试过的样品 int main() { unordered_map<string,unique_ptr<char[]>> mymap; string key = "ac"; char* ctr = "myvalue"; unique_ptr<char[]> value = make_u

在将唯一指针插入
std::unordered\u映射时,我停止了操作

当我寻找答案时,我得到了一个链接:

我试过了,但对我不起作用。这是我到现在为止试过的样品

int main()
{
    unordered_map<string,unique_ptr<char[]>> mymap;
    string key = "ac";
    char* ctr = "myvalue";
    unique_ptr<char[]> value = make_unique<char[]>(100);
    memcpy(value.get(), ctr,5);
    mymap.insert_or_assign(key,std::move(value));
    return 0;
}
intmain()
{
无序的"我的地图",;
string key=“ac”;
char*ctr=“myvalue”;
唯一值=使唯一(100);
memcpy(value.get(),ctr,5);
插入或赋值(key,std::move(value));
返回0;
}

获取编译问题。

您的
mymap
int
eger为键

unordered_map<int,unique_ptr<char[]>>  mymap
//            ^^^
这就是说,这里不需要使用智能指针,而只是一个简单的指针

std::unordered_map<std::string, std::string> mymap;
std::无序映射mymap;

不能在STL容器中使用唯一指针。唯一指针只是转移所有权,而不是共享所有权。 在STL容器中使用唯一指针时,可能会发生未定义的行为
复制容器将使源容器保留无效数据。

您可以发布编译错误吗?您的映射键是整数,但
键是字符串?请发布带有完整代码和错误消息的a,您不使用
std::vector
而不是
std::unique\u ptr
有什么原因吗?或者,考虑您的示例,
std::string
?在询问有关构建错误的问题时,始终在问题本身中包含完整的输出。并在中获得错误的行上添加注释。也请刷新,以及。@MartinBonnersupportsMonica yep,我添加它是因为问题说它使用的是
std::map
,当它因为实际使用
unordered\u map
而没有编译时,我忘了删除它,虽然更新了代码,但不会更改结果键实际上是一个字符串sorry@DhanasekaranDon如果是这样,就无法复制。我建议在问题中发布完整的错误信息。这根本不是真的。您当然可以在STL容器中使用唯一的指针。实现唯一指针可以在C++89中完成(请参阅std::auto_ptr),问题是无法在STL容器中使用它们。C++11引入了右值引用、std::move、std::unique_ptr,并使之成为可能。显然,您不能复制包含唯一指针的STL容器,但您肯定可以移动它。是的,但在容器内可以进行复制。无效将被生成。有一些方法是复制的;它们不会编译,因为std::unique\u ptr没有复制构造函数或复制赋值运算符,但总会有类似的方法移动。
std::unordered_map<std::string, std::string> mymap;