C++ 使用Map插入对象和字符串C++;
我正在读取一个文件,并且我正在尝试使其到达一个位置,如果我在地图中已经找到一个对象,它将把新对象的值添加到地图中已经找到的对象中。我不知道的是如何用正确的语法来处理映射。以下是我所拥有的:C++ 使用Map插入对象和字符串C++;,c++,map,C++,Map,我正在读取一个文件,并且我正在尝试使其到达一个位置,如果我在地图中已经找到一个对象,它将把新对象的值添加到地图中已经找到的对象中。我不知道的是如何用正确的语法来处理映射。以下是我所拥有的: struct ap_pair { ap_pair(float tp, float tm) : total_price(tp), total_amount(tm) {}; ap_pair & operator+=(const ap_pair &); float total
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;
}
}
struct ap\u对{
ap对(浮动tp,浮动tm):总价格(tp),总金额(tm){};
ap_对和运算符+=(常量ap_对和);
浮动总价格;
浮动总金额;
};
void APC::计算总数()
{
字符串名;
map::迭代器my_it;
浮子num1、num2、num3;
而(!fs.eof())
{
fs>>name>>num1>>num2;//读入文件
ap_pair myobj(num1,num2);//发送重量/计数和每对ap_的单价
my_it=mymap.find(name);//返回迭代器
if(my_it!=mymap.end())
{
//myobj+=//此处出错。如何将新对象添加到地图中已存在的对象?
}
其他的
插入(对(名称,myobj));
if(fs.eof())break;//使最后一行不重复
num3=num1*num2;
总金额+=num1;
总价+=num3;
}
}
我正在经历一个带有if条件的迭代器。它应该找到具有相同名称的匹配项,但如何添加已在映射中找到的对象的值?a
std::map
迭代器是一对。第一个元素是键,第二个元素是值。如果要将新对象添加到找到的对象中,可以这样做:
my_it->second += myobj;
->second
将为您提供对地图中该位置的对象的引用,然后您只需调用已定义的+=
操作符即可
此外,如果您为pair类型创建一个默认构造函数(也许它会将两个字段置零),那么您的代码可以简化为
while (!fs.eof() )
{
fs >> name >> num1 >> num2; //read in file
mymap[name] += ap_pair(num1, num2);
// ... Rest of the loop...
}
如果运算符
[]
未找到与名称相关联的值,它将默认构造一个值,然后执行加法。astd::map
迭代器是一对。第一个元素是键,第二个元素是值。如果要将新对象添加到找到的对象中,可以这样做:
my_it->second += myobj;
->second
将为您提供对地图中该位置的对象的引用,然后您只需调用已定义的+=
操作符即可
此外,如果您为pair类型创建一个默认构造函数(也许它会将两个字段置零),那么您的代码可以简化为
while (!fs.eof() )
{
fs >> name >> num1 >> num2; //read in file
mymap[name] += ap_pair(num1, num2);
// ... Rest of the loop...
}
如果运算符[]
没有找到与名称相关联的值,它将默认构造一个值,然后执行加法。!它看起来很管用。如果我想在映射中输出容器的值,我该怎么做?我可以用for循环输出名称:for(my_it=mymap.begin();my_it!=mymap.end();my_it++)cout first您可能需要重载操作符太棒了!它看起来很管用。如果我想在映射中输出容器的值,我该怎么做?我可以使用for循环输出名称:for(my_it=mymap.begin();my_it!=mymap.end();my_it++)cout first您可能需要重载运算符