[英]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.