Как отсортировать мультимножество в контейнере по количеству вхождений элементов

Я хочу отсортировать элементы по количеству их вхождений . Вот что у меня получилось (mHeights — это std::multiset):

namespace{
  template<class U,class T>
  class HistPair{
    public:
      HistPair(U count,T const& el):mEl(el),mNumber(count){      
      }
      T const&  getElement()const{return mEl;}

      U getCount()const{return mNumber;}
    private:
      T mEl;
      U mNumber;
  };

  template<class U,class T>
  bool operator <(HistPair<U,T> const& left,HistPair<U,T> const& right){
    return left.getCount()< right.getCount();
  }
}

std::vector<HistPair<int,double>  > calcFrequentHeights(){
  typedef HistPair<int,double> HeightEl;
  typedef std::vector<HistPair<int,double>  > Histogram;
  std::set<double> unique(mHeights.begin(),mHeights.end());
  Histogram res;
  boostForeach(double el, unique) {
    res.push_back(HeightEl(el,mHeights.count(el)));    
  }
  std::sort(res.begin(),res.end());
  std::reverse(res.begin(),res.end()); 
  return res;
}

Итак, сначала я беру все уникальные элементы из мультимножества, затем подсчитываю их и сортирую в новый контейнер (мне нужны подсчеты, поэтому я воспользуйтесь картой). Это выглядит довольно сложно для такой простой задачи. Помимо HistPair, который также используется в других местах, нет ли какого-либо алгоритма stl, который упростил бы эту задачу, например. используя equal_range или sth. одинаково.

Редактировать: мне также нужно количество вхождений, извините, я забыл об этом

5
задан Martin 15 June 2012 в 16:36
поделиться