Narzędzia użytkownika

Narzędzia witryny


search_n

Algorytm seach_n

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.

Użycie standardowe search_n

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");
Użycie search_n z predykatem binarnym

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>());

Źródło: adjacent_find.cpp

search_n.txt · ostatnio zmienione: 2008/12/12 23:03 przez ltrzaska