Frequency algorithm for STL containers

Is there an STL algorithm to find the element which occurs the most often in a container?
Thanks.
RothbardAsked:
Who is Participating?
 
itsmeandnobodyelseCommented:
It is not very difficult to write your own template function, e. g. like the function below.

Regards, Alex


#include <vector>  
#include <iostream>  
#include <algorithm>

template<class I, class T>
int occurs_mostoften(I i1, I i2, T& t)
{
    std::vector<T> v(i1, i2);
    std::sort(v.begin(), v.end());
    int c = 0; int idx = -1; int mc =  0;
    std::vector<T>::iterator il = v.begin();
    std::vector<T>::iterator im = v.begin();
    for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it)
    {
         if (!(*il < *it) && !(*it < *il) )
         {
             if (++c > mc)
             {
                  mc = c;
                  im = il;
             }
         }
         else
         {
              c = 1;
              il = it;
          }    
    }

    if (im != v.end()) t = *im;
    return mc;
}


int main()
{
    int a[] = { 4, 6, 3, 4, 2, 8, 3, 2, 3, 1, 0, 4, 1, 3, 2, 9, 7, 3 };
    vector<int> v(&a[0], &a[sizeof(a)/sizeof(int)]);
    vector<int>::iterator it;
    int c, r = -1;
    if ((c = occurs_mostoften(v.begin(), v.end(), r)) > 0)
    {
        std::cout << r << " : " << c << endl;
    }
    return 0;
}

0
 
Infinity08Commented:
No, not to my knowledge.

You could use a multiset though, in combination with the count method :

    size_type count(const key_type& k) const

That will give you the number of elements with a certain value (key). If you repeat that for all values, you can easily extract the max.

That's the first though that comes to mind for your requirements ...
0
 
Infinity08Commented:
fyi, here's a nice list of the STL algorithms :

http://www.josuttis.com/libbook/algolist.pdf
0
 
RothbardAuthor Commented:
Thanks to all who replied!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.