मैं उनके अवसर की संख्या से क्रमबद्ध तत्व प्राप्त करना चाहता हूं। यह है कि मैं क्या के साथ आए हैं है (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;
}
तो सबसे पहले तो मैं उन्हें गिनती और (एक नई कंटेनर में उन्हें सॉर्ट मैं गिनती की ज़रूरत है इसलिए मैं एक मानचित्र का उपयोग करता हूं)। यह इतना आसान काम के लिए काफी जटिल लग रहा है। हिस्टपेयर के अलावा, जिसे कहीं और भी उपयोग किया जाता है, वहां कोई भी एसएलएल एल्गोरिदम नहीं है जो इस कार्य को सरल बना देगा। बराबर_रेंज या एसएचएच का उपयोग करना। एक जैसे।
संपादित करें: मैं भी आवृत्तियां की संख्या की जरूरत है, खेद मुझे लगता है कि
मेरे लिए काफी संक्षिप्त लग रहा है । मैं कल्पना नहीं कर सकता कि आप अपनी हिस्टोग्राम निर्माण दिनचर्या में से एक या दो से अधिक योजना बना रहे हैं। 'Std :: multiset' के बजाय 'std :: map ' का उपयोग करने का विकल्प हो सकता है और तत्वों को सम्मिलित करते समय अपने बिन आकारों को काम कर सकते हैं, लेकिन यह अधिक नहीं बदलेगा। –
Rook
@nims: यही वह है जो मैं कर रहा हूं या मैंने आपको गलत समझा। मुझे गिनती और तत्व – Martin
@ मार्टिन मेरे खराब की जरूरत है, इसे अनदेखा किया। – nims