gpt4 book ai didi

c++ - 如果具有相同的名称,则返回列表元素的指针

转载 作者:太空宇宙 更新时间:2023-11-03 10:26:21 24 4
gpt4 key购买 nike

我有一个方法可以检查列表中是否存在与参数同名的元素。如果找到了,我想返回一个指向它的指针,如果该方法没有找到任何东西,则返回一个空指针。这是函数:

Place *PlacesMap::Check(string name) {
for (list<Place>::iterator iterator = map.begin(); iterator != map.end(); iterator++) {
Place current = *iterator;
if (current.GetName() == name)
return &*iterator;
}
return nullptr;
}

一个Place有一个Name和Info,都是字符串,就是类:

class Place {

private:
string name;
string info;

public:
Place();
Place(string name, string info);

inline string GetName() {
return name;
}

inline string GetInfo() {
return info;
}

inline void Set(string newName, string newInfo) {
name = newName;
info = newInfo;
}
};

当我在 Places 列表中插入另一个 Place 时,如果已经有一个同名的元素,它只会更新信息。为此,我遍历列表,并检查是否已经有一个具有该名称的地方,如果有我更新信息,那工作正常。但是当我尝试插入一个已经存在的地方时,它会更新信息,并且在使用 Check 方法检查它之后,它仍然显示旧信息。我在 Check 方法上做错了什么?

这是插入方法的实现:

void PlacesMap::Insert(Place p) {
if (!map.empty()) {
for (list<Place>::iterator iterator = map.begin(); iterator != map.end(); iterator++) {
Place current = *iterator;
if (current.GetName() == p.GetName()) {
current.Set(p.GetName(), p.GetInfo());
} else if ((iterator == --map.end())) {
map.insert(iterator, p);
counter++;
}
}
} else {
map.insert(map.end(), p);
counter++;
}
}

最佳答案

问题是你试图获取行中元素的拷贝:

Place current = *iterator;

在您的插入方法代码中。您需要改用引用。请尝试:

Place &current = *iterator;

关于c++ - 如果具有相同的名称,则返回列表元素的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33414586/

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