gpt4 book ai didi

c++ - vector map 的实现

转载 作者:行者123 更新时间:2023-11-30 03:58:17 29 4
gpt4 key购买 nike

我需要帮助开始这项作业。我有一个基类 Shape 和派生类 MyCircleMyRectMyTriangle。对于作业,我需要随机生成形状并将它们存储到 map 中。这是我不明白的。它指出:映射中的键值将是形状类型,映射值将是形状指针的 vector 。

我创建了形状指针的 vector ,如下所示:

// define our array size
const int baseSize = 3;

// create an vector of base class pointers
vector <Shape *> baseShape(baseSize);


// declare our objects, and pointers for downcasting
MyRect rObj, *rPtr;
MyTriangle tObj, *tPtr;
MyCircle cObj, *cPtr;


// initialize our vector of base class pointers
//initialize vector of shapes
baseShape[0] = &rObj; // a MyRect IS A Shape
baseShape[1] = &tObj; // a MyTriangle IS A Shape
baseShape[2] = &cObj; // a MyCircle IS A Shape

但我不确定如何实现 map ,更具体地说,我不明白为什么键值类型是Shape。如果我声明一个 map 如下

//map
map <Shape, vector <Shape *> > shapeMap;

map 可以做到这一点吗?

shapeMap[rObj] = baseShape[0];
shapeMap[rObj] = baseShape[0];
shapeMap[rObj] = baseShape[0];
shapeMap[rObj] = baseShape[0];

...每个形状 20 次,具有不同属性的形状。

enter image description here

最佳答案

我的解释是,对于形状类型,您可以创建类型的枚举,并将其用作键。

enum class ShapeType { circle, square, triangle };

map<ShapeType, vector<Shape*>> shapes;
shapes[ShapeType::circle].push_back( new MyCircle{} );

(上面几行代码并没有删除圆圈,除非这样做,否则会发生内存泄漏。)

关于c++ - vector map 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27489694/

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