簡體   English   中英

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

[英]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作為參考。

危險! findHoldingStockHolding 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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM