c++ - 如何更新 map C++ 中元素的值

标签 c++ object dictionary stdmap stock

我正在制作一个程序,我需要从 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/

相关文章:

javascript - 如何将加载到 <object> 中的元素样式设置为数据

javascript - 提交时捕获对象中的表单数据

python - 无损添加或合并python字典

c++ - 关于小数点的投币机

c++ - 任何用于将 borland c++ 转换为 visual studio C++ 的代码转换工具

python - 根据其属性为python对象生成唯一ID

java - 按值对java映射进行排序(包含一个集合)

python字典列总和

c++ - 是否有可能在单目 ORB-SLAM2 中获得距离缩放?

c++ - 在不产生动态查找成本的情况下拥有通用代码接口(interface)的好方法是什么?