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...
}

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

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...
}

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

!它看起来很管用。如果我想在映射中输出容器的值,我该怎么做?我可以用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您可能需要重载运算符