Mega Code Archive
Categories
/
C++
/
Algorithm
Get equal range with equal_range
#include
#include
#include
#include
using namespace std; template
void print(T& c){ for( typename T::iterator i = c.begin(); i != c.end(); i++ ){ std::cout << *i << endl; } } int main( ){ const int len = 15; const int a[len] = { 9, 2, 3, 3, 7, 5, 7, 7, 4, 10, 5, 6, 7, 4, 7 }; vector
v( a, a + len ); vector
::iterator v_end = v.end(); sort( v.begin(), v.end() ); vector
::iterator start = v.begin(); int mode_range = 0; int mode_grade = 0; pair
::iterator,vector
::iterator> range; // look for the largest range, which is the mode while( start != v_end ) { range = equal_range( start, v_end, *start ); if( range.second - range.first > mode_range ){ mode_range = range.second - range.first; mode_grade = *start; } start = range.second; } cout << "Mode by method 2: " << mode_grade << "\n\nMinimum: " << v[0] << " Maximum: " << v[len-1] << " Median: " << v[len/2] << endl; }