如何在C++类中将所有私有向量换成私有地图
How do I swap out all my private vectors for private maps in a C++ class?
我有一个场景类,用于游戏中的对象、摄像机和灯光
class Scene {
private:
std::vector<GameObject> objects;
std::vector<Light> lights;
// ... more containers ...
我正在尝试创建一个类接口,允许用户添加、删除、检索和迭代这些对象,而无需授予他们对底层容器(此时为向量)的特定访问权限。
public:
GameObject& get_game_object(const unsigned int id);
void add_game_object(const GameObject& object);
void remove_game_object(const unsigned int id);
在场景中添加、删除和检索对象工作正常。
但是,在尝试遍历这些游戏对象时,我遇到了一个问题。
template<class T>
void for_each_game_object(T t) const {
std::for_each(begin(objects), end(objects), t);
}
这个"包装器"适用于我的底层向量类。
scene.for_each_game_object([] (GameObject& object) {
// do something in the lambda
});
但是现在我想将我的向量换成unordered_maps其中键是无符号整数,值是GameObject
(或相机或灯光等)。
for_each_game_object
循环现在需要不同的 lambda,并向最终用户公开键/值对。有没有办法重写 for_each_game_object
循环以仅迭代映射的值并忽略 id(由 Scene
类在内部使用)?
对于技术问题:传递一个函数(例如 lambda)来调用客户端代码的函子。
但请注意,对于向量,如果在给定索引处删除对象会移动以下对象的索引 (id),则映射的行为是不同的。因此,此更改可能会破坏现有的客户端代码。也就是说,问题可能不仅仅是适应 lambda 的技术问题。
此代码仅将函数映射到映射键/值对的值部分:
class Wrapper
{
public:
void Apply(const std::function <void (const std::string)>& functor)
{
for (auto i : _Map)
{
functor(i.second);
}
}
private:
std::unordered_map<int, std::string> _Map;
};
相关文章:
- 通过关键点向量从地图中获取地图
- C++带有标准::地图的向量?
- 如何遍历地图向量
- C++使用以向量作为值的地图
- 将空初始化器列表分配给现有向量或地图的效果
- 持有地图引用地图向量
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何获取地图中向量的第二个值?
- unordered_maps的向量,在地图中搜索太慢
- 向量映射作为实例成员的C 地图
- 在向量内打印地图
- 地图中地图中的向量
- 获取地图值作为向量的最佳方法是什么
- 在C 中实现地图向量
- 更新存储在地图中的向量的向量
- 将对向量对矢量转换为哈希表 /地图
- 了解C 中的地图和向量的TypeId.name()输出
- 如何通过向量/地图对对象使用多个指针
- C 地图向量参考错误
- 在地图中使用字符串向量