Найти элемент вектора специфических объектов по 2 полям [дубликаты]

0

У меня есть класс S:

class S
{
public:
    S(int ssx, int ssy, int cnt)
    {
        sx = ssx;
        sy = ssy;
        count = cnt;
    }
    int sx;
    int sy;
    int count;
};

Я хочу создать контейнер, который может найти указатель (итератор) элемента, который соответствует двум параметрам (например, пара {sx, sy}, эта пара должна быть равна паре элемента в контейнере). Существуют ли какие-либо методы STL или я должен выполнить поиск, используя круг FOR (;;) и простой вектор S *?

Теги:
containers
stl

1 ответ

1

Вы можете использовать std::find_if().

Сначала объявите предикатный класс для двух членов

struct CmpS {
    int x;
    int y;
    CmpS(int x, int y) { this.x = x; this.y = y; }
    bool operator()(const S& s) const { return s.sx == x && s.sy == y; }
};

Затем вызовите std::find_if().

std::vector<S> vec;
std::vector<S>::iterator iter = std::find_if(vec.begin(), vec.end(), CmpS(x, y));
  • 0
    Предикат может быть лямбда с C ++ 11.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню