如何更新map C ++中元素的值

时间:2016-04-30 01:12:45

标签: c++ object dictionary stdmap stock

我正在制作一个程序,我需要从地图中获取和对象并更新对象的值。以下是我的数据类中的一些代码:

StockHolding& StockData::findHolding(const string &ticker) {
 StockHolding var;
 var = portfolio[ticker];
 return var;
}

以下是data.h类的代码:

typedef std::map<std::string, StockHolding>StockMap;
class StockData
{
 private: StockMap portfolio;
 private: string portfolioFile;
 private: void splitString(vector<string> &, const string &, char);
public:
 StockData();
 StockData(const string &);
 void addHolding(StockHolding &);
 void readPortfolioFile();
 StockHolding& findHolding(const string &);
 void display();
 void writePortfolioFile(); 
};

这是我的Driver类中的代码:

main(){
 StockHolding sH = sD.findHolding("APPL");
 sH.setPrice(5);
 sD.findHolding("APPL").setShares(15);
 sD.display();
 sD.writePortfolioFile();
}

2 个答案:

答案 0 :(得分:2)

StockData::findHolding中,您要声明一个与地图中的元素无关的局部变量var,因此对其进行修改不会产生任何影响。< / p>

并且引用返回var,但是当退出函数时,var将被销毁,然后返回的引用将被悬空。

您可以通过引用直接返回map元素:

StockHolding& StockData::findHolding(const string &ticker) {
 return portfolio[ticker];
}

然后

StockHolding& sH = sD.findHolding("APPL");
sH.setPrice(5);
sD.findHolding("APPL").setShares(15);

会奏效。请注意,您还需要声明sH作为参考。

答案 1 :(得分:0)

危险!在findHolding中,StockHolding var;是本地的。将它作为参考将其作为参考将无法做你想做的事情并且可能会繁荣。

StockHolding& StockData::findHolding(const string &ticker) {

表示该函数返回对StockHolding的引用。

 StockHolding var;

行。我们有StockHolding。那很酷。

 var = portfolio[ticker];

StockHoldingportfolio复制到var

 return var;

返回对局部变量var的引用,这是不好的。 var即将死去。但var只包含您想要的数据副本。原件位于portfolio中,对副本所做的任何修改都不会更改。假设使用现在悬挂的参考文件并不会导致你的程序失效。

}

你可能只想要

return portfolio[ticker];