如何在没有复制构造函数的情况下为地图设置值?
How to set value to a map without copy constructor?
必须将不可复制类的实例填充到映射中。例如,使用此代码:
#include <map>
class NoCopyClass
{
public:
NoCopyClass() {};
NoCopyClass(int value) {};
NoCopyClass& operator=(const NoCopyClass&) = delete;
};
int main()
{
std::map<int, NoCopyClass> my_map;
my_map[3] = NoCopyClass(20);
}
除非您注释掉复制构造函数的删除,否则这将无法编译。 你可以在这里尝试一下:https://onlinegdb.com/ByBh0NubU
当类不可复制时添加新地图元素的正确方法是什么?
非常感谢!
尝试使用emplace()
就地构造对象,而不是复制已构造的对象:
int main()
{
std::map<int, NoCopyClass> my_map;
my_map.emplace(3, 20);
}
试试这个:
#include <map>
class NoCopyClass {
public:
NoCopyClass() {};
NoCopyClass(int value) {};
NoCopyClass& operator=(const NoCopyClass&) = delete;
};
int main() {
std::map<int, NoCopyClass> my_map;
// 1. option
my_map.insert(std::make_pair(3, 30));
// or 2. option
my_map.emplace(std::make_pair(4, 40));
// or 3. option
my_map.emplace(5, 50);
// or 4. option
my_map.emplace(std::piecewise_construct,
std::forward_as_tuple(6),
std::forward_as_tuple(60));
// or 5. option (from C++17)
my_map.try_emplace(7, 70);
return 0;
}
现场查看
选项:
- 使用
std::pair
的移动构造函数, - 使用
std::pair
的转换移动构造函数 - 使用
std::pair
的模板构造函数 - 使用
std::pair
的分段构造函数 - 如果容器中已存在键,则它不执行任何操作;否则,其行为类似于
emplace
,只是元素构造为value_type
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- 如何在没有复制构造函数的情况下为地图设置值?
- 如何在给定任意数量的整数的情况下创建一个唯一键?并使用该键存储,然后从地图中查找
- 在不知道的情况下获取地图的钥匙
- 如何在不使用迭代器的情况下在 C++ 中打印地图
- 如果我在键不存在的情况下读取地图的值,会发生什么情况?
- 在不增加地图大小的情况下检查地图内容
- 如何在没有平铺地图的情况下使用Cocos2D制作滚动游戏