如何更新地图 C++ 中元素的值

How to update values of elements in map C++

我正在制作一个程序,我需要从地图中获取对象并更新对象的值。这是我的数据 class:

中的一些代码
StockHolding& StockData::findHolding(const string &ticker) {
 StockHolding var;
 var = portfolio[ticker];
 return var;
}

这是来自 data.h class 的代码:

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(); 
};

这是我的驱动程序的代码 class:

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

StockData::findHolding中你声明了一个局部变量var,它与地图中的元素无关,所以修改它不会有任何影响。

var是通过引用return编辑的,但是var在函数退出时会被销毁,那么return编辑的引用就会悬空。

您可以 return 直接引用 map 的元素:

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

然后

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

会起作用。请注意,您还需要将 sH 声明为参考。

危险!在findHolding中,StockHolding var;是本地的。将其作为参考返回将无法执行您想要的操作,并且可能会爆炸。

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

表示函数 returns 对 StockHolding.

的引用
 StockHolding var;

好的。我们有一个StockHolding。太棒了。

 var = portfolio[ticker];

StockHoldingportfolio 复制到 var

 return var;

Returns 对局部变量 var 的引用,这是错误的。 var 快要死了。但是 var 只包含您想要的数据的副本。原件在 portfolio 中,对副本所做的任何修改都不会改变。这是假设使用现在悬挂的引用不会终止您的程序。

}

你可能只是想要

return portfolio[ticker];