gpt4 book ai didi

c++ - 如何保留指向插入集合然后插入 vector 的对象的指针?

转载 作者:行者123 更新时间:2023-11-30 05:30:09 24 4
gpt4 key购买 nike

我有一个 std::set<std::pair<Point, double>> my_set和一个 vector std::vector<std::pair<Point, double>*> my_vec它保存指向集合中元素的指针。 my_setmy_vec是一个类的成员。

我还有一堆新的 Point我想插入到集合中的 s my_set , 与一个值 ( double ) 配对。我不知道如何保持指向 std::pair<Point, double> 的指针对象将此指针推到 my_vec .

如果我在方法 A 中执行以下操作:

auto pair = std::pair<Point(1,2), 0.2>; my_set.insert(pair); my_vec.push_back(&pair);

我最终得到了错误的对,甚至是无效的对。需要注意的是 my_setmy_vec是类的成员,方法 A 也来自该类。我的结果是否错误,因为 pair 对象仅在该方法的上下文中有效,并且通过离开该方法它变得无效?我有点被困在这里。提前致谢!

最佳答案

集合(与标准库中的所有迭代器一样)存储对象的拷贝。这意味着您不应该存储对象的初始地址。

您可以尝试将元素的地址存储在集合中:

auto pair = std::pair<Point(1,2), 0.2>;
auto it = my_set.insert(pair).first;
my_vec.push_back(&(*it));

但我无法保证元素的地址 保持不变。我只能在标准草案 n2496 中看到

23.2.4 Associative containers [associative.reqmts]
...
9 The insert and emplace members shall not affect the validity of iterators and references to the container, and the erase members shall invalidate only iterators and references to the erased elements.

所以恕我直言,您最好将迭代器存储在 vector 中。

关于c++ - 如何保留指向插入集合然后插入 vector 的对象的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com