简体   繁体   English

比较向量中元素的最有效和最快方法?

[英]the most efficient and fastest way to compare elements in a vector?

What is the most efficient and fastest way to compare elements in a vector of class using two iterators? 使用两个迭代器比较类向量中元素的最有效和最快方法是什么? The vector is not a sortable one and I have an overloaded ">" operator for the class. 该向量不是可排序的向量,并且该类有一个重载的“>”运算符。 I use boost foreach for simple vector iterations. 我将boost foreach用于简单的矢量迭代。

I am doing something similar to the one given below. 我正在做类似下面的事情。

vector<TestClass*> vec; 
vector<TestClass*>::iterator jIter;     
bool isErased=false;
vector<TestClass*>::iterator iIter = vec.begin();
if(!vec.empty()){
    while(iIter < vec.end()-1) {            
        isErased = false;
        for (jIter = iIter+1; jIter < vec.end();jIter++) {          
            if((*(*iIter))<=(*(*jIter))) {
                delete *jIter;
                jIter = vec.erase(jIter);               
                jIter--;
            }               
            else if((*(*iIter))>=(*(*jIter))) {                 
                delete *iIter;
                iIter = vec.erase(iIter);
                isErased = true;
                break;
            }               
        }
        if(!isErased) iIter++;
    }               

Thank you. 谢谢。

The most tricky part is to avoid running into invalidated iterators: 最棘手的部分是避免遇到无效的迭代器:

v.erase(std::remove_if(v.begin(), v.end(), [j](T const &i) { return i > j; });

You could also employ a loop, but use reverse iterators in that case 可以使用循环,但是在这种情况下使用反向迭代器

PS: I can't grok what you actually wanted achieve in your algorithm PS:我无法理解您实际上想要在算法中实现的目标

You might be interested in 您可能对

Untested but something like this. 未经测试,但类似这样。

 for(auto it=vec.begin(), end=vec.end(); it!=end; ++it) {
   const auto&& val=*it;
   std::size_t count=0u;
   end=std::remove_if(
       it, end,
       [&](const TestClass& tc) -> bool {
           if(tc==val) ++count;
           return (count > 1);
       }
   );
 }
 vec.erase(end, vec.end());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 删除/删除向量项目的最有效/最快方法 - Most efficient/fastest way to delete/remove items of a vector 使用 Eigen 重复向量中的元素并在所有元素上应用一组不同的函数的最有效方法是什么? - What is the most efficient way to repeat elements in a vector and apply a set of different functions across all elements using Eigen? 将变量与多个值进行比较的最有效方法? - Most efficient way to compare a variable to multiple values? 比较所有碰撞盒的最有效方法? - Most efficient way to compare all collision boxes? 将char向量转换为字符串的最有效方法 - most efficient way to convert char vector to string 将矢量分成几个的最有效方法 - Most efficient way to split a vector into several 对向量中的一个元素进行排序的最有效方法? - Most efficient way to sort one element in a vector? 用较大的向量覆盖向量的最有效方法 - Most efficient way to overwrite a vector with a larger one 在保留原始顺序的同时擦除/删除多个 std::vector 元素的最有效方法? - Most efficient way of erasing/deleting multiple std::vector elements while retaining original order? 复制在std向量中只出现一次的元素的最有效方法是什么? - What is the most efficient way of copying elements that occur only once in a std vector?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM