Funkcja wypisująca najczęściej występujący element w tablicy, wektorze lub stringu

maro1
2013-11-25 18:52
maro1
0

Czy jest funkcja w c++ wypisująca najczęściej występujący element w tablicy, wektorze, stringu?

Pozostało 580 znaków

2013-11-25 19:45

Rejestracja: 17 lat temu

Ostatnio: 4 tygodnie temu

Lokalizacja: Katowice

Nie ma, ale można łatwo napisać:

// To jest template alias.
// Pozwala latwo dobrac sie do typu na jaki wskazuje iterator.
template <typename InputIt>
using InputItValue = typename std::iterator_traits<InputIt>::value_type;

template <typename InputIt>
InputItValue<InputIt> mostFrequent(InputIt begin, InputIt end) {
  // Do zliczana uzyjemy mapy, w ktorej kluczem beda elementy z podanego zakresu
  // a wartoscia ilosc wystapien.
  std::unordered_map<InputItValue<InputIt>, std::size_t> value_map;

  // Iterujemy po wszystkich elementach w zakresie [begin, end)
  for (InputIt it = begin; it != end; ++it) {
    // Dodajemy do mapy elementy oraz inkrementujemy licznik 
    ++value_map[*it];
  }

  // To jest po to, zeby nie pisac za duzo.
  // Potrzebujemy typu jaki przechowuje mapa.
  // decltype "wyciaga" typ z podanej zmienej, zeby nie powtarzac znow rozwleklego typu mapy.
  typedef typename decltype(value_map)::value_type MapPair;

  // Szukamy maksymalnego licznika w mapie i zwracamy zwiazany z nim element.
  return std::max_element(value_map.begin(),
                          value_map.end(),
                          // Zeby znalezc ten licznik trzeba patrzec na drugi element pary z mapy.
                          [](const MapPair &rhs, const MapPair &lhs) {
                            return rhs.second < lhs.second;
                          })->first;
}

http://ideone.com/xH6irJ

:-D


"(...) otherwise, the behavior is undefined".
edytowany 2x, ostatnio: Endrju, 2013-11-25 20:15
Podejrzewam że pytający ma ograniczenia co do wartości elementów. Jeżeli mam racje to powyżej przedstawiona armata na muchę :) - _13th_Dragon 2013-11-25 19:47
Zapewne. :-D Ale jaka piękna. - Endrju 2013-11-25 19:48
Pardon, piękna armata na muchę. ;P - _13th_Dragon 2013-11-25 19:51

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0