C++ C+有问题+;创建指针向量或指针值映射

C++ C+有问题+;创建指针向量或指针值映射,c++,dictionary,pointers,vector,boost,C++,Dictionary,Pointers,Vector,Boost,为了提供一些上下文,我正在尝试创建一个地图或一个向量,看起来像以下任何一个: 我两个都试过了,但似乎都没用 vector<Player*,Player*> regionOwners; map<int, vector<Player*>> regionOwners; 我似乎无法用nullptrs初始化我的向量或贴图,以表明该区域没有所有者 for(int i=0; i< gameMap->getVertexCount(); i++) { i

为了提供一些上下文,我正在尝试创建一个地图或一个向量,看起来像以下任何一个: 我两个都试过了,但似乎都没用

vector<Player*,Player*> regionOwners; 
map<int, vector<Player*>> regionOwners;
我似乎无法用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}});
    }
 }
for(inti=0;igetVertexCount();i++){
如果(游戏地图->getVertex(i)->getData()=“外部”){
regionOwners[i].向后推({nullptr,nullptr});//向量样式
}
否则如果(gameMap->getVertex(i)->getData()=“内部”){
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}); 
regionOwners[i]={nullptr,nullptr};//矢量
regionOwners.insert({nullptr,nullptr});//矢量
地图;
插入(i,{nullptr,nullptr});
regionOwners[i]。推回({nullptr,nullptr});
regionOwners.push_-back(i,{nullptr,nullptr});
我想知道大家对如何解决我的问题有什么建议,因为我知道我很可能在这个问题上做错了。我想使用linkedlist的一个向量,这样一旦我解析了区域,我就可以从播放器的一个节点转到另一个节点。 谢谢。

首先,这个

vector<Player*,Player*> regionOwners; 
现在您可以使用它们,例如,如下所示

// 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
而不是原始指针

std::vector<std::array<Player*, 2>>
为方便起见,您可以创建名称别名:

using RegionOwners = std::vector<std::array<Player*, 2>>;
RegionOwners regionOwners (11, {nullptr, nullptr});
使用RegionOwners=std::vector;
RegionOwners RegionOwners(11,{nullptr,nullptr});

您应该使用
new Player()
而不是
nullptr
,当您尝试访问分配为
nullptr
的指针时,它会导致各种问题。…
vector
不是有效的向量实例化。我尝试过,但每次尝试都会出现:regionOwners[region][0]我得到:Type'std::\uuuu 1::\uu向量基::值\u Type'(也称为'std::\uu 1::数组')不提供下标运算符。如果我将其作为一对,一个值(播放器)不会映射到另一个值吗?一对值只是两个值。它们是捆绑在一起的,但对于任何容器来说都是如此。另外,
std::pair::second
可以是
nullptr
,这样就没有这样的“映射”;就像你说的。按我需要的方式工作。谢谢
std::vector<std::array<Player*, 2>>
std::vector<std::array<Player*, 2>> regionOwners (11, {nullptr, nullptr});
if(regionOwners[5][1]) {
    //blahblah
}
using RegionOwners = std::vector<std::array<Player*, 2>>;
RegionOwners regionOwners (11, {nullptr, nullptr});