Как проверить членство в C ++ std :: vector и т. Д.? - PullRequest
0 голосов
/ 16 декабря 2011

Что я делаю не так в приведенной ниже программе?

Я хочу использовать std::find() для контейнера, чтобы решить, содержит ли он данный элемент.Программа ниже работает для пустого контейнера, но не для элемента с элементом.

#include <iostream>
#include <vector>
#include <cassert>

struct Pair {int x,y;};

const bool operator==(Pair p, Pair q) {return p.x == p.x && q.y == q.y ;}

typedef std::vector<Pair> p_containr_t;

int main (int argc, char * const argv[]) {
  const Pair start_p = {1,2};
  const Pair second_p = {3,4};
  const Pair other_p = {5,6};
  p_containr_t v;
  p_containr_t::iterator where;

  where = std::find(v.begin(),v.end(),other_p);
  assert(where == v.end());
  std::cout << "OK for empty\n";                     // Program reaches here.

  v.push_back(start_p);
  where = std::find(v.begin(),v.end(),other_p);
  assert(where == v.end());                          // This assertion fails.
  std::cout << "OK for first element\n";

  v.push_back(second_p);
  where = std::find(v.begin(),v.end(),other_p);
  std::cout << "OK for second element\n";      // Fails too (if I edit above).

  return 0;
}

Ответы [ 2 ]

6 голосов
/ 16 декабря 2011
const bool operator==(Pair p, Pair q) {return p.x == p.x && q.y == q.y ;}

Посмотри внимательно на эту строку.

2 голосов
/ 16 декабря 2011

Это условие всегда выполняется:

const bool operator==(Pair p, Pair q) {return p.x == p.x && q.y == q.y ;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...