如何计算指向不同向量数组中特定对象的指针的出现次数
Posted
技术标签:
【中文标题】如何计算指向不同向量数组中特定对象的指针的出现次数【英文标题】:How to count occurences of a pointer to a specific object in different vector arrays 【发布时间】:2017-01-31 09:07:52 【问题描述】:我已经定义了一个类node
。
一个element
类由四个指向不同节点的指针组成。节点指针可以在元素之间共享。nodes
和 elements
是 node
和 element
对象的向量数组。
std::vector<node> nodes;
std::vector<element>elements; //Each element consist of four node pointer.
指向node
object 的指针可以被不同的element
对象共享,即不同的element
对象可能包含指向node
对象的相同指针。如果元素中有node
objects 不被两个以上的元素共享,我如何从元素的向量数组中识别element
对象。
示例:node
对象的 ID 为 1,2,3,4,5 和 6。element
elem1 包含 ID 为 1,2,3,4 的节点,element
elem2 包含 ID 为 3,4 的节点, 5,6。那么这两个元素都满足上述条件。
编辑 1:
我更喜欢不会随机/更改vector elements
的解决方案。必须使用已识别的 element
对象创建新的元素向量
编辑 2: 我的程序旨在解析节点和元素的大数据的输入文件。内存和效率很重要。
【问题讨论】:
识别出elem1
和elem2
后,您想做什么?在它们上运行一些功能?将它们存放在新容器中?将它们全部洗牌到elements
容器的前面? <algorithm>
中有一些算法可以帮助您实现这些,但我无法在不知道您真正想要实现什么的情况下选择一种。
我将遍历分离出的element
对象的向量并运行一些函数
这听起来像是您的想法,而不是您实际上想要做的事情。您是否需要将它们放入新容器中?还是您只需要在它们上调用一个函数,但您认为这意味着您需要在新容器中使用它们?
如果需要统计引用,请查看std::shared_ptr::use_count。
@YuriyIvaskevych 我不认为生命周期是个问题;不必要的共享所有权只会让事情变得混乱。
【参考方案1】:
基本上,您需要做的第一步是确定存在多少唯一节点指针。您可以解析elements
vector 并将所有node
指针存储在map
中,如下所示
map<node*, std::list<element> > node_to_element
此映射中的每个条目都将存储引用node
指针的element
objects 列表
接下来,您需要迭代此映射并找出列表大小
一旦你有了这些条目,你就有了 element
对象,它们引用不超过 2 个 node
指针
编辑
正如@sameerkn & @0x499602D2 指出的那样,地图可以修改成这样
map <node *, std::vector<int> > node_to_element_indexes
其中std::vector<int>
可用于存储std::vector<element> elements
中引用node *
的元素对象的索引
【讨论】:
map<node*, std::list<int>> node_to_element;
。代替std::list<element>
,可以使用std::list<int>
,它将存储std::vector<element> elements;
的索引
@Rishi,感谢您提供见解
你为什么决定使用链表而不是向量?
vector
可以使用。我刚刚发布了一个例子。我喜欢上面 cmets 中提到的@sameerkn 建议。可以通过使用 std::vector<int>
来修改建议,它将存储 std::vector<element> elements
的索引以上是关于如何计算指向不同向量数组中特定对象的指针的出现次数的主要内容,如果未能解决你的问题,请参考以下文章