我正在制作一个程序,我需要从 map 中获取对象并更新对象的值。这是我的数据类中的一些代码:
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();
};
这是来 self 的驱动程序类的代码:
main(){
StockHolding sH = sD.findHolding("APPL");
sH.setPrice(5);
sD.findHolding("APPL").setShares(15);
sD.display();
sD.writePortfolioFile();
}
最佳答案
在 StockData::findHolding
中,您声明了一个局部变量 var
,它与 map 中的元素无关,因此对其进行修改不会有什么影响。
而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
声明为引用。
关于c++ - 如何更新 map C++ 中元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36949670/