c++ - 在 C++ 中创建指针向量或指针值映射时遇到问题
问题描述
为了提供一些背景信息,我正在尝试创建一个看起来像其中任何一个的地图或矢量:我已经尝试了这两种方法,但似乎无法让它工作。
vector<Player*,Player*> regionOwners;
map<int, vector<Player*>> regionOwners;
本质上,我在游戏中有对应于整数值(0-10)的区域大多数区域只能有 1 个所有者(玩家),但是某些区域也可以有 2 个所有者。这就是我想要一个向量的原因,这样我就可以去 regionOwners[regionNumber][0] 或 regionOwners[regionNumber][1] 并访问 playerObject 或 nullptr。如果可能,我想将矢量大小设置为最大 2。
我基本上想存储这样的示例:
1 --> [PlayerPtr*]
2 --> [Player1Ptr*, Player2Ptr*]
3 --> [nullptr, nullptr]
4 --> [nullptr]
5 --> [Player1Ptr*, nullptr]
6 --> [nullptr, Player1Ptr*]
我似乎无法用 nullptrs 初始化我的向量或地图,以表明该区域没有所有者。
for(int i=0; i< gameMap->getVertexCount(); i++) {
if(gameMap->getVertex(i)->getData() == "outer") {
regionOwners[i].push_back({nullptr , nullptr}); // vector style
}
else if (gameMap->getVertex(i)->getData() == "inner") {
regionOwners.insert({i, {nullptr}});
}
}
我已经尝试了地图和矢量的所有变体。我难住了。
regionOwners[i]= {nullptr , nullptr}; // vector
regionOwners.insert({nullptr, nullptr}); // vector
map<int,vector<Player*>> something;
something.insert(i, {nullptr, nullptr});
regionOwners[i].push_back({nullptr , nullptr});
regionOwners.push_back(i ,{nullptr , nullptr});
我想知道有人对如何解决我的问题有什么建议,因为我知道我可能会犯这个错误。我想过使用链表的向量,这样一旦我解决了该区域,我就可以从 Player 的一个节点转到另一个节点。谢谢。
解决方案
首先,这
vector<Player*,Player*> regionOwners;
无法按您的意愿工作。std::vector
存储标量条目(并且第二个模板参数是您现在可能不想指定的分配器),因此该声明将被编译器拒绝。
如果可能的话,我想将向量大小设置为最大 2
这使它成为一个std::pair
,而不是一个std::vector
。您可以尝试以下方法之一:
std::vector<std::pair<Player*, Player*>> regionOwnersVec;
std::map<int, std::pair<Player*, Player*>> regionOwnersMap;
现在您可以使用它们,例如如下所示。
// allocates memory if necessary:
regionOwnersVec.push_back({nullptr, nullptr});
// ... or set some predefined size, which allocates and default-initializes:
regionOwnersVec.resize(42);
// ... which enables indexing the vector:
regionOwnersVec[10] = {nullptr, nullptr};
或者,std::map
例如,
regionOwnerMap[10] = {nullptr, nullptr};
作为旁注,如果您希望容器拥有实例,请更喜欢std::unique_ptr
与std::make_unique
而不是原始指针一起使用。
推荐阅读
- list - 在 Haskell 中添加从第二个列表到另一个列表的差异
- css - 尝试使用 justify-content:center 将 .follow-btn 居中;
- java - 用一系列数字填充一个整数数组,该数字是一个字符串(java)
- javascript - useRef Typescript 错误:“HTMLElement”类型上不存在属性“当前”
- python - 在python中从一个字典迭代到另一个字典
- html - 我如何制作具有多个项目引导程序和 jquery 的垂直轮播滑块
- prisma - 如何使用 Prisma2 一次创建多条记录?
- java - 查询字符串 sql
- r - NBA 四分之一秒剩余秒数转换为比赛剩余秒数
- python - Python数据表(或熊猫):基于两列的数据帧的棘手排序