如何更新地图 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];
将 StockHolding
从 portfolio
复制到 var
。
return var;
Returns 对局部变量 var
的引用,这是错误的。 var
快要死了。但是 var
只包含您想要的数据的副本。原件在 portfolio
中,对副本所做的任何修改都不会改变。这是假设使用现在悬挂的引用不会终止您的程序。
}
你可能只是想要
return portfolio[ticker];
我正在制作一个程序,我需要从地图中获取对象并更新对象的值。这是我的数据 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];
将 StockHolding
从 portfolio
复制到 var
。
return var;
Returns 对局部变量 var
的引用,这是错误的。 var
快要死了。但是 var
只包含您想要的数据的副本。原件在 portfolio
中,对副本所做的任何修改都不会改变。这是假设使用现在悬挂的引用不会终止您的程序。
}
你可能只是想要
return portfolio[ticker];