【发布时间】:2010-09-24 21:10:45
【问题描述】:
这是一件非常简单的事情,但我一直在努力理解。我正在尝试将vector<complex <double> > vec 的元素与complex <double> num 进行比较,以检查vec 上是否已经存在num。如果有,则不添加。我尝试使用 equal() 和算法,但没有成功。有谁知道快速的方法吗?
EDIT2:为了简化,我尝试对复数执行此操作,因为我还需要对结构执行相同的操作:
struct thing{
int i;
int j;
complex <double> pos;
}typedef t_thing;
complex <double> new_num(2.0,2.0);
t_thing will_insert;
will_insert.i = 1;
will_insert.j = 1;
will_insert.pos = new_num;
vector<t_thing> vec_thing;
if(! (find(vec_thing.begin(),vec_thing.end(),will_insert) == vec_thing.end())){
vec_thing.push_back(will_insert);
}else {
cout<<"element already on vec_thing"<<endl;
}
编辑 3:我重载了运算符 ==,但 find 无法使用它:
: error: no matching function for call to ‘find(__gnu_cxx::__normal_iterator<thing*, std::vector<thing, std::allocator<thing> > >, __gnu_cxx::__normal_iterator<thing*, std::vector<thing, std::allocator<thing> > >, t_thing&)’
【问题讨论】:
-
std::find不返回布尔值 - 它返回一个迭代器。如果迭代器指向 vec.end(),那么你就知道向量中不存在该元素。否则,find将返回一个指向定位元素的迭代器。
标签: c++ stl find complex-numbers