gpt4 book ai didi

c++ - 使用Map插入一个对象和一个字符串C++

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:25 26 4
gpt4 key购买 nike

我正在读取一个文件,如果我在 map 中找到一个对象,我会尝试将其转到哪里,它会将新对象的值添加到 map 中已找到的对象中。我不知道如何使用正确的 map 语法来做到这一点。这是我拥有的:

struct ap_pair {
ap_pair(float tp, float tm) : total_price(tp), total_amount(tm) {};
ap_pair & operator+=(const ap_pair &);
float total_price;
float total_amount;
};


void APC :: compute_total ()
{

string name;
map<string, ap_pair> :: iterator my_it;
float num1, num2, num3;

while (!fs.eof() )
{
fs >> name >> num1 >> num2; //read in file

ap_pair myobj(num1, num2); //send the weight/count and per unit price ap_pair

my_it = mymap.find(name); //returns iterator



if (my_it != mymap.end())
{
// myobj+= //ERROR here. how can I add the new object to the object already in the map?


}
else
mymap.insert(pair<string, ap_pair>(name, myobj));



if (fs.eof()) break; //makes it so the last line is not repeated

num3= num1*num2;
total_amount+=num1;
total_price+= num3;

}




}

我正在通过一个带有 if 条件的迭代器。它应该找到具有相同名称的匹配项,但我如何添加已在 map 中找到的对象的值?

最佳答案

std::map 迭代器是一对。第一个元素是键,第二个是值。如果要将新对象添加到找到的对象中,可以这样做:

my_it->second += myobj;

->second 将为您提供对 map 中那个位置的对象的引用,然后您只需在其上调用您定义的 += 运算符即可。

此外,如果您为您的对类型创建一个默认构造函数(也许它将两个字段归零),那么您的代码可以简化为

while (!fs.eof() )
{
fs >> name >> num1 >> num2; //read in file
mymap[name] += ap_pair(num1, num2);

// ... Rest of the loop...
}

如果运算符 [] 没有找到与 name 关联的值,它将默认构造一个值,然后执行加法。

关于c++ - 使用Map插入一个对象和一个字符串C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195036/

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