所以,我得到了这个:
struct People_Info {
bool isWorking;
std::string name;
int age;
float height;
};
int counter = 0;
int random = urand(1, 4);
std::map<uin64, People_Info> PeopleMap;
现在,将调用一个函数,该函数将在地图中创建一个条目,该结构将设置一些默认值:
PeopleMap[counter].isWorking = false;
PeopleMap[counter].name = "Mr";
PeopleMap[counter].age = 1;
PeopleMap[counter].height = 1.60f;
counter++;
现在,这是应该为新用户创建条目的功能,但是,在整个脚本中我将删除一些条目,所以如果我有5个元素,我将删除例如第二个,然后,我想编辑地图中每个人的一些变量:
for(int i = 0; i < 5 ; i++) {
if(PeopleMap[i] == PeopleMap.end()) // Don't edit map entries that are erased
continue;
PeopleMap[i].isWorking = true;
}
现在,由于某种原因,它仍在编辑所有条目,我是否需要使用new为每个条目创建一个结构?
答案 0 :(得分:2)
PeopleMap.end()
不返回有效参数,它就像一个鬼节点。
例如,迭代地图的方法可能是:
for(std::map<uin64, People_Info>::iterator it = PeopleMap.begin();it != PeopleMap.end() ;it++)
看,PeobleMap
就像一个幽灵节点,最后表示你已到达终点。
在之前的for
中,如果您想访问地图值,则可以执行以下操作:
it->first // uint64
it->second.isWorking
因此,如果您使用迭代器,则不必检查已擦除的值,并且您可以编辑地图中每对中的参数(更少键)
答案 1 :(得分:1)
当使用下标运算符访问映射中不存在的键时,会插入相应的元素。对象之前被删除是无关紧要的:如果它不存在,它仍将被插入。
要访问地图中的所有元素,您不使用这些键,而是在地图上使用迭代器。这样就不会插入新元素。
答案 2 :(得分:0)
以下内容不正确:
if(PeopleMap[i] == PeopleMap.end())
你可能想说
if(PeopleMap.find(i) == PeopleMap.end())