如何保留指向插入到集合中然后推送到向量中的对象的指针
How to keep a pointer to a object which is inserted into a set and then pushed into a vector?
我有一个std::set<std::pair<Point, double>> my_set
和一个向量std::vector<std::pair<Point, double>*> my_vec
,它包含指向集合中元素的指针。 my_set
和my_vec
是类的成员。
我还有一堆新的Point
,我想将它们插入到集合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_set
和 my_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 关联容器 [associaciative.reqmts]
...
9 插入和放置成员不得影响迭代器和对容器的引用的有效性, 并且擦除成员应仅使迭代器和对擦除元素的引用无效。
所以恕我直言,你最好在你的向量中存储迭代器。
相关文章:
- C++:如何读取分离变量,然后读取向量
- 如何正确地推回然后遍历堆中对象的向量?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 有没有办法搜索向量的元素,<String>然后检查它是否包含特定的字符,如果它确实打印了它
- C++:将向量传递给函数,然后在main中调用函数.错过了什么
- C++ 按数值对元组<字符串、浮点数>然后按字典顺序排序的向量
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 将整数向量转换为字节数组向量,然后调用每个字节数组
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- 我可以在中断中写入向量,然后以安全的方式仅在主线程内读取吗?
- 制作一个对的向量,对其进行排序,然后从中提取向量
- 根据标准对结构向量进行排序,然后显示结果
- C - 将文本文件读为一串单词,然后将字符串分为向量
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- 我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序
- remove_if然后擦除对向量有效吗
- 如何在C++中创建一个网格,这将允许我将每个索引设置为一个向量,以便以后操作该向量,然后绘制它
- C 将向量转换为2个十六进制,然后将其存储在字符串中