gpt4 book ai didi

c++ - 遍历一个对象 vector 并找到一个与从文本文件中提取的变量相匹配的变量

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:33 27 4
gpt4 key购买 nike

所以我有一个对象 vector

vector<Module*> moduleVector;         

我需要遍历它并将对象的属性与我从文本文件中提取的另一个属性进行比较

我正在使用 ifstreamgetLine() 来存储需要与对象属性进行比较的元素(fileD 是打开的文件,markModId为字符串变量)

getline(fileD, markModId, ' ');

但我不确定如何在迭代器中引用对象的属性。所以我的问题是,

如何使用迭代器比较文件和对象的属性?

引用这里是我的对象构造函数(id是我要比较的属性)

Module::Module(string id, string title, string lecturer, int 
courseworkWeight)
{
code = id;
name = title;
lect = lecturer;
cwWeight = courseworkWeight;
exMark = 0; //ex mark initialised as 0
/*
Map to store coursework marks
*/
map<string, float> CWmarks;
//cwMarks.clear(); //cw marks map cleared
//create a map that stores
}

exMark是对象需要添加的属性。 Module 构造函数中的所有属性都是private

最佳答案

How do I compare the attribute from the file to the object using an iterator?

简答:假设您有一个迭代器 std::vector<Module*>::iterator iter您可以访问 Module 的公共(public)成员类如:

(*iter)->/*public member*/;

长答案:首先,你需要一个私有(private)成员的getter id和一个二传手 exMark , 通过它你可以获得 id每个 Module并与文件中的 id 进行比较,然后设置其 exMark到某个值。

std::string getId()const { return code; }
void setExMark(const double newMark) { exMark = newMark; }

如果您想更改 Module 的第一个真实实例, 你可以使用 std::find_if 寻找 Module :

std::string idFromFile = "two";
auto Condition = [&idFromFile](Module* element){ return element->getId() == idFromFile; };
auto iter = std::find_if(moduleVector.begin(), moduleVector.end(), Condition);

if(iter != moduleVector.end())
(*iter)->setExMark(10.0); // see this
// ^^^^^^^^^

See a sample code here

对于多个实例你可以这样做:

for(auto iter = moduleVector.begin(); iter != moduleVector.end(); ++iter)
if ( (*iter)->getId() == idFromFile)
(*iter)->setExMark(10.0);

注意:在现代 C++ 中,您可以使用 smart pointers ,而不是原始指针,它将在超出范围时自动删除对象。

关于c++ - 遍历一个对象 vector 并找到一个与从文本文件中提取的变量相匹配的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51954966/

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