У меня есть класс, который выглядит
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";
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;
bool operator==(Element const& lhs, Element const& rhs);
вне класса?