где проблемный вектор найти с ++ ?? - PullRequest
0 голосов
/ 30 июля 2011

когда я компилирую, у меня ошибка, и я не могу понять, в чем проблема?

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 ]

5 голосов
/ 30 июля 2011

find будет сравнивать (с ==) объекты типа Edge в векторе с nid.Я предполагаю, что nid имеет тип int, и это не сработает, если вы не введете operator== между Edge и int.

Вы можете попробовать:

it = find (edges.begin(), edges.end(), Edge(nid));
2 голосов
/ 30 июля 2011

Вы не описали симптомы выписки для вашей проблемы, но я думаю, что это связано с тем, что не определил operator!=

Вы, вероятно, хотите определить его как

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

также, если ваш find (..., nid) принимает nid в качестве целочисленного аргумента, вам, вероятно, также необходимо перегрузить оператор == как

   bool operator==(const int&edge)const {
      return this->nid == edge;
   }
0 голосов
/ 30 июля 2011

Предполагая, что nid того же типа, что и в классе, я предполагаю, что вы получите жалобу на тип третьего аргумента для find (). Я думаю, что вы можете переключить его на:

vector<Edge>::iterator it = find (edges.begin(), edges.end(), edges.begin() + nid);
0 голосов
/ 30 июля 2011

Вы можете либо перегрузить оператор! =, Либо просто отменить условие if.

...