要素を発生回数でソートしたいのですが、 これは私が出ているものです(mHeightsはstd ::多重集合である):その後、私はそれらをカウントし、(新しいコンテナに私をそれらを並べ替える私は、マルチセットからすべてのユニークな要素を取るので、最初要素の出現数でコンテナにマルチセットを並べ替える方法
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を使用します。似ている。
編集:私はこのスニペットその
が私にはかなり簡潔ルックス。あなたのヒストグラム作成ルーチンから2行以上を計画しているとは想像できません。代わりに、 'std :: multiset'の代わりに 'std :: map 'を使い、要素を挿入するときにビンサイズを決めることもできますが、それほど変わることはありません。 –
Rook
@nims:それは私がやっていることですか、私はあなたを誤解しました。私はカウントと要素が必要です – Martin
@マーティン私の悪い、それを見落とした。 – nims