iterator search_n( iterator start, iterator end, size_t num, const TYPE& val ); iterator search_n( iterator start, iterator end, size_t num, const TYPE& val, BinPred p );
Funkcja search_n() szuka num wystapień w zasiegu kontenera [start,end). Jeżeli zostanie znalezione num kopii danego elementu występujących kolejno w sekwencji, funkcja zwraca iterator na pierwszy znaleziony element. W przeciwnym wypadku zwraca iterator na end danej sekwencji. Jeżeli predykat binarny jest zadany, to zostaje użyty do specyficznego porównania elementow.
Znajdź np. dwa wystąpienia słowa w kontenerze np. wektorze.
vector<string> vecA; vecA.push_back("Zebra"); vecA.push_back("Anakonda"); vecA.push_back("Anakonda"); vecA.push_back("Zyrafa"); //iterator wskazujacy na pierwszy element ze znalezionych w sekwencji vector<string> itResult = search_n(vecA.begin(), vecA.end(), 2, "Anakonda");
Chcemy zdefiniować własny sposób porównania wyszukiwanych n elementów. Dla przykładu za równe uznajmy elementy których ostatnia litera jest taka sama.
//deklaracja binarnego predykatu //zwraca TRUE gdy porownywane stringi maja ostatnia litere ta sama template<class T> struct string_equal_last : public binary_function <T, T, bool> { bool operator()(const T& x, const T& y) { if(typeid(T) != typeid(std::string)) //zabezpiecz przed uzyciem nie dla stringu return false; string::const_iterator ix = x.end(); string::const_iterator iy = y.end(); if(*--ix == *--iy) return true; return false; } }; //wyszukanie 4 kolejnych elementów które mają taką samą ostatnią literę jaką ma "Anakonda" itResult = search_n(vecA.begin(), vecA.end(), 4, "Anakonda", string_equal_last<string>());