gpt4 book ai didi

c++ - 在 map 中插入对象而不复制对象

转载 作者:太空狗 更新时间:2023-10-29 20:37:08 28 4
gpt4 key购买 nike

如果对象的类禁用了复制构造函数和复制运算符,是否可以在映射中插入对象? move 语义在这里有用吗?

#include <map>

class T {
public:
T(int v): x(v) {};
private:
T(const T &other); // disabled!
T &operator=(const T &other); // disabled!
int x;
};

int main() {
std::map<int, T> m;
m[42] = T(24); // compilation error here!
}

编辑 我不是很清楚。该对象很大,所以我不想制作不必要的拷贝。但是我可以修改类的代码(也许我需要实现 move 语义?)而不是用户代码(示例中的 main 函数)。

最佳答案

使用安置语法:

m.emplace(std::piecewise_construct,
std::forward_as_tuple(42), std::forward_as_tuple(24));
// ^^ ^^
// int(42) T(24)

或者,在 C++17 中,使用 try_emplace:

m.try_emplace(42, 24);

关于c++ - 在 map 中插入对象而不复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com