从向量中成对删除元素

从向量中成对删除元素

本文介绍了从向量中成对删除元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 亲爱的cpp-ians, 我正在使用结构向量。 vector< meta_segment> meta_segm(2421500); ,结构如下: struct meta_segment { float id; float num; 浮动平均值; 浮点数; 浮动sumofsquares; float std; struct pixel * head; struct pixel * tail; struct pixel * edge_head; struct pixel * edge_tail; struct segment * segment; bool full; }; 我运行一个程序: 1.获取向量的随机元素 2.在元素上运行一个函数 3.使用''meta_segm.erase''从列表中删除元素。 并重复此过程,直到向量为空 我遇到的问题是在第2步的功能。这个函数使用 随机元素(A)(步骤1中)并搜索第二个元素 ( B)基于不同的标准。所以我的函数实际上运行了两个 元素(A和B),而不是只有一个(A)。 现在,我想在第3步中翻译它并删除来自 向量的A和B. 我知道如何删除A,但我不知道如何删除B. B不是 必然是A'的邻居。我想找到它(基于我用来检测它的 相同的标准),但是我花了很多时间,因为 我将不得不这样做那么每一个元素。 欢迎任何有关如何编程此类问题的建议。 在此先感谢并亲切的问候, StefDear cpp-ians,I am working with a vector of structures.vector <meta_segment> meta_segm (2421500);and the structure look like:struct meta_segment{float id;float num;float mean;float sum;float sumofsquares;float std;struct pixel * head;struct pixel * tail;struct pixel * edge_head;struct pixel * edge_tail;struct segment * segment;bool full;};I run a procedure that:1. takes a random element of the vector2. runs a function on the element3. removes the element from the list with the ''meta_segm.erase''.and repeats this procedure untill the vector is emptyThe problem I have is in the function of step 2. This function uses therandom element (A) (out of step 1) and searches for a second element(B) based on different criteria. So my function runs actually for twoelements (A and B), instead of only one (A).Now, I want to translate this in step 3 and remove A and B from thevector.I know how to remove A, but I have no idea how to remove B. B is notnecessarly A''s neighbour. I thought of searching for it (based on thesame criteria I use to detect it), but I that takes to much time sinceI will have to do it for every element then.Any advice on how to program this kind of problem is welcome.Thanks in advance and kind regards,Stef推荐答案 在向量中搜索元素是O(N),因为没有 自然顺序。通常,顺序由插入,的算法决定。这可能不是你想要的顺序 他们。更糟糕的是,从向量中删除随机元素是很昂贵的。 你最好使用std :: set。但是,如果你能确定一个允许你找到每个 元素''B''的订单,这只会工作。 为了给你一个很好的答案,我们需要知道如何为给定的A找到一个B 。 HTH Michiel SaltersSearching for an element in a vector is O(N), because there is nonatural ordering. Usually, the order is determined by the insertions,or the last call to std::sort, or another algorithm that changes theorder of elements. That might not be the order in which you would wantthem. Worse, removing a random element from a vector is expensive.You would be better off using a std::set. However, this will work onlyif you can determine a single order which allows you to find everyelement ''B''.To really give you a good answer, we''d need to know how you find a Bfor a given A.HTHMichiel Salters 你不能修改你的检测程序,这样它不仅可以计算出有问题的元素,还可以告诉你它在哪里被发现? 或者你可以修改检测功能,这样它就不会返回 元素,但会告诉你元素的位置(它返回 迭代器,如果没有找到则返回end())。那个检测函数的调用者然后需要查找元素本身,但这不是问题,因为它有一个迭代器。 - Karl Heinz Buchegger kb **** **@gascad.at 这篇关于从向量中成对删除元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-20 09:45