【发布时间】:2009-12-29 23:06:51
【问题描述】:
我了解当我们将值插入 STL 映射时,会制作并存储一个副本。 我的代码本质上是在地图上进行查找并获得迭代器。
然后我打算使用迭代器来更改地图中的值。 结果不是我所期望的,即:从程序的另一部分访问时,值不会改变。我怀疑是因为我正在应用的更改是 价值。 相关代码如下。
ObjectMappingType::iterator it = objectMapping_.find(symbol);
if (it == objectMapping_.end()) {
throw std::invalid_argument("Unknown symbol: " + symbol);
}
get<3>(it->second) = value;
注意:我实际上是在尝试更改 boost::tuple 中的一个值,该值存储为地图的“值”部分。
【问题讨论】:
-
来自我之前关于元组可变性的问题。双 d = 2.7;一个;元组
t(1, d, a);双 e = 得到(t); // ok from boost.org/doc/libs/1_41_0/libs/tuple/doc/… get() 获取元组的第四个成员。 -
您如何检查该值是否未更改?您是否尝试在示例的最后一行之后直接
assert()? -
其实我只是打印出来的。在与更改相同的功能中打印出指示值已更改。但在不同的功能中,它似乎并没有改变,这让我相信我改变了一个本地人。
-
假设
get<>()像宣传的那样工作,上面的代码应该可以工作 - 我怀疑你有不同的问题。 -
好吧,既然有人说它可以工作,我建议发布一个可以编译但仍然无法工作的程序。