Поиск вектора с оператором ==

0

У меня есть класс, который выглядит

class Element
{
public :
    Element(int im_index, int seg_index)
    {
        imIndx = im_index;
        segIndx = seg_index;
    }
    Element() { imIndx=-1 ; segIndx=-1; }

    void getData( int & toReturnImIndx, int & toReturnSegIndx )
    {
        toReturnImIndx = imIndx;
        toReturnSegIndx = segIndx;
    }

    // Specific for disjoint_sets
    size_t dsID;
    size_t dsRank;
    size_t dsParent;

    bool operator==(Element const& rhs);
    bool operator!=(Element const& rhs);
    bool compareByParent(Element const& rhs);

private:
    int imIndx;
    int segIndx;

};

Единственное, что нужно отметить, это то, что я определил оператор "==".

Теперь, учитывая вектор Elements (vector<Element>), как искать элемент в нем. Я знаю, что у него есть функция std::find. Эта функция запрашивает функцию сравнения. Как можно указать оператор "==".

Я хочу использовать его как

vector<Element> ele;
// populate the ele

Element tmp( 2,3 );
if( find( ele, tmp ) )
    cout<< "found" ;
else
    cout<< "not found";
  • 0
    Вы также объявили bool operator==(Element const& lhs, Element const& rhs); вне класса?
  • 0
    но у меня есть один внутри класса. Обязательно ли объявлять один снаружи тоже?
Показать ещё 3 комментария
Теги:
vector

1 ответ

1
Лучший ответ

std::find принимает три аргумента. Первые два являются итераторами, указывающими диапазон поиска. Если вы хотите выполнить поиск всего вектора, передайте итераторы, возвращаемые функциями begin и end элемента вектора, соответственно.

Element tmp( 2,3 );
if( std::find( ele.begin(), ele.end(), tmp ) != ele.end() )
    cout<< "found" ;

Обратите внимание, что вы должны объявить свой оператор сравнения const.

bool operator==(Element const& rhs) const;

Ещё вопросы

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