Frequency algorithm for STL containers

Is there an STL algorithm to find the element which occurs the most often in a container?
Thanks.
Who is Participating?

Commented:
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

Commented:
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

Commented:
fyi, here's a nice list of the STL algorithms :

http://www.josuttis.com/libbook/algolist.pdf
0

Author 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.