8 Temmuz 2019 Pazartesi

std:equal_range

Giriş
Açıklaması şöyle. Verilen değere eşit olan iki iterator döndürür. Dizinin sıralı olması gerekir.
Returns a range containing all elements equivalent to value in the range [first, last).
Bu algoritmayı kullanırken aranan ve değer tipleri aynı ise sadece tek bir karşılaştırma metodu yeterli olur. Ancak tipleri farklı ise algoritma iki farklı imzalı metoda ihtiyaç duyar.

Örnek
Şöyle yaparız.
struct cmp {
  bool operator()( const std::string &s, char c ) const { return s.front() < c;}
  bool operator()( char c, const std::string &s ) const { return c < s.front();}
};
std::vector<std::string> strings;
...
std::sort( strings.begin(), strings.end() );
auto range = std::equal_range( strings.begin(), strings.end(), 'a', cmp{} );

Hiç yorum yok:

Yorum Gönder