问题向量在哪里找到c ++?

时间:2011-07-29 22:23:10

标签: c++ iterator find

当我编译时我有一个错误,我无法理解问题在哪里?

class Edge{  
public:  
      int nid;  
      bool operator==(const Edge& edge) const {  
            return nid == edge.nid;  
      }  
 };  

和问题

vector<Edge> edges;  
vector<Edge>::iterator it;  
it = find (edges.begin(), edges.end(), nid);

if( it != edges.end() )  
      edges.erase(it); 

任何想法?!!!?

4 个答案:

答案 0 :(得分:5)

find会将==中的Edge类型的对象与nid进行比较。我猜nid类型为int,除非您在operator==Edge之间实施int,否则无效。

您可以尝试:

it = find (edges.begin(), edges.end(), Edge(nid));

答案 1 :(得分:2)

您尚未描述问题的摘录症状,但我认为这与未定义operator!=

的问题有关

您可能希望将其定义为

   bool operator!=(const Edge&edge)const {
      return !(*this == edge);
   }

如果你的find(...,nid)将nid作为整数参数,你可能还需要重载==运算符

   bool operator==(const int&edge)const {
      return this->nid == edge;
   }

答案 2 :(得分:0)

您也可以重载运算符!=,或者只是否定if条件。

答案 3 :(得分:0)

假设nid与类中的类型相同,我假设您对find()的第三个参数的类型抱怨。我想你可以把它切换到:

vector<Edge>::iterator it = find (edges.begin(), edges.end(), edges.begin() + nid);