我正在尝试通过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";
答案 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;