gpt4 book ai didi

c++ - 从嵌套在std::map中的std::list中删除元素的最佳方法

转载 作者:行者123 更新时间:2023-12-02 10:00:26 27 4
gpt4 key购买 nike

如标题所述,我想知道从满足特定条件(名称和日期)的 map 中的列表中删除元素的最有效方法是什么。这是我提供的功能:

void Register::DeleteActivity(const Date &f,const std::string &a) {
auto it = Registro.find(f);
if(it != Registro.end()) {
if(it->second.empty()) {
std::cout <<"Error"<<std::endl;
} else {
for(auto ip = it->second.begin(); ip != it->second.end();) {
if(ip->getName() == a && ip->getStartdate() == f){
ip->printInfo();

it->second.erase(ip);
} else {
ip++;
}
}
}
} else {
std::cout<< "DeleteActivity::day not found"<<std::endl;
}
}
这是完整的类(class):
class Register {
private:
map<Date,std::list<Activity>> Registro;
public:
Register(){};
void addActivity(Date &z, Activity &n);
void editActivity(const Date &a, const std::string &c, Date k, const std::string newname);
void DeleteActivity(const Date &f, const std::string &a);

}

最佳答案

有一个错误:您需要ip = it->second.erase(ip);erase使迭代器无效,并将迭代器返回到下一个元素。
但是您可以摆脱循环,让列表完成工作:

else {
it->second.remove_if([&f, &a](const Activity& act)
{ return act.getName() == a
&& act.getStartdate() == f; });
}

关于c++ - 从嵌套在std::map中的std::list中删除元素的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62791456/

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