【发布时间】:2018-11-07 19:15:06
【问题描述】:
我的实现使用 std::map 来存储数据。当我开始编写代码时,它似乎是最好的选择。现在我到了必须更改地图内所有对象的键值的地步。
问题是每个对象都指向地图内的另一个对象:
class AND : public node{
vector <node*> inputs;
vector <node*> outputs;
}
地图是这样声明的:
map<unsigned int, AND> all_ANDs;
我的问题是:如果我使用 C++17 中的 map::extract 来修改 all_ANDs 映射中的键值,我的指针(例如属性输入内的指针)是否会继续指向合适的地方?
换句话说:如果我用extract改变“first”元素的值,“second”的地址会保持不变?
我从this link 注意到字符串“papaya”保持不变(并且工作正常)。但我想确定指针。
【问题讨论】:
-
这很明显是XY problem。您需要更改地图的键这一事实意味着您的设计存在缺陷。改变设计。另外:到目前为止,您尝试过什么来回答您的问题?为什么不简单地尝试
extract一个元素并用另一个键重新insert它,然后检查它的地址?如果我们能做到,那么你也能做到! -
确保您的对象
AND不可移动和不可复制的一种方法。如果必须更改地址,编译器会呕吐。 -
@Walter “为什么不简单地尝试提取一个元素并用另一个键重新插入它,然后检查它的地址?”这是一个糟糕的建议,你不应该从特定实现的行为中推断出需求。
-
@Slave 这不是一个糟糕但实用的建议。你所做的是假设这样一个练习的结果可以用来推断需求。我从没想过。反之亦然:如果实验表明某个应用程序中的地址发生了变化,那么标准是否另有规定都无关紧要。
-
@Walter 但如果地址没有改变结果是无用的,这就是你的建议不好的原因,你应该依赖记录在案的行为
标签: c++ pointers extract stdmap