遍历file.txt并更新映射值

时间:2019-03-11 09:52:36

标签: c++

我正在尝试通过file.txt进行迭代时更新我的​​地图 我添加了一些“测试代码”以输出我的值,即时消息得到125.00(这是我想要的)和100(我不想要的)

我不认为我会以正确的方式将其插入地图或以正确的方式将其检索。因为添加之前的值是正确的,并且在我检索它时,它不是正确的方式

if (accountFile.is_open())
    {
        while (!accountFile.eof())
        {
            (std::getline(accountFile, accounttemp.user, ',') &&
                std::getline(accountFile, accounttemp.trantype, ',') &&
                std::getline(accountFile, (accounttemp.bal)));

            (std::getline(loginFile, logintemp.user, ',') &&
             std::getline(loginFile, (logintemp.pass)));
            cout << logintemp.user << endl;

            //http://www.cplusplus.com/reference/map/map/find/
            // find value given key
            it = balances.find(accounttemp.user);
            if (it != balances.end())
            {
                double holder = 0;
                if (accounttemp.trantype == "D")
                {
                    holder = std::stod(accounttemp.bal) + std::stod(balances.find(accounttemp.user)->second);
                }
                if (accounttemp.trantype == "W")
                {
                    holder = std::stod(accounttemp.bal) - std::stod(balances.find(accounttemp.user)->second);
                }
                stringstream stream;
                stream << fixed << setprecision(2) << holder;
                string s = stream.str();
                accounttemp.bal = s;

                //this is were i added some test code to see my output
                cout << accounttemp.bal << endl;                    
                balances.insert(pair<string, string>(accounttemp.user, accounttemp.bal));
                cout << (balances.find(accounttemp.user)->second) << endl;
enter code here
                //out put is 125.00 
                //out put is 100
            }
            else
            {
                balances.insert(std::pair<string, string>(accounttemp.user, (accounttemp.bal)));
            }



        }
    }
    cout << "\n";

1 个答案:

答案 0 :(得分:0)

您有:

        it = balances.find(accounttemp.user);
        if (it != balances.end())
        {

仅当balances包含accounttemp.user元素时才进入该块。然后代码有:

            balances.insert(pair<string, string>(accounttemp.user, accounttemp.bal));

不执行任何操作,因为地图已经包含带有该键的元素。请注意,insert不会替换现有元素。最多可以为std::multimap插入具有相同键的新元素。但是使用std::map不会发生任何事情。查看documentation of std::map::insert

  

将一对由迭代器组成的对返回给插入的元素(或阻止插入的元素)和一个布尔值,表示是否发生插入。

我认为它没有为您返回false,因为没有插入。

FIX:而是更新迭代器:

            // instead of:
            // balances.insert(pair<string, string>(accounttemp.user, accounttemp.bal));
            it->second = accountemp.bal;