[英]How to update values of elements in map C++
我正在編寫程序,我需要從地圖中獲取和對象並更新對象的值。 這是我的數據類中的一些代碼:
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();
}
在StockData::findHolding
您要聲明一個局部變量var
,它與地圖中的元素無關,因此對其進行修改不會有任何效果。
並且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
作為參考。
危險! 在findHolding
, StockHolding var;
是本地的。 將其返回作為參考將無法執行您想要的操作,並且可能會蓬勃發展。
StockHolding& StockData::findHolding(const string &ticker) {
說函數返回對StockHolding
的引用。
StockHolding var;
好。 我們有一個StockHolding
。 這很酷。
var = portfolio[ticker];
將StockHolding
從portfolio
復制到var
。
return var;
返回對局部變量var
的引用,這是錯誤的。 var
即將死亡。 但是var
只包含您想要的數據的副本。 原件包含在portfolio
並且對副本進行的任何修改都不會更改。 假設使用現在懸而未決的引用不會殺死您的程序。
}
你可能只想
return portfolio[ticker];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.