, जैसा कि मैं समझता हूं, यह आसान है। बस ऑपरेटर < अधिभारित करें। हालांकि, int/float आदि के लिए .., क्या मुझे वास्तव में int के लिए ऑपरेटर < अधिभारित करने की आवश्यकता है?एसएलएल के साथ एक न्यूनतम ढेर बनाए रखने के लिए आसान तरीका? उपयोगकर्ता परिभाषित संरचना के लिए
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool comp(const int& a, const int& b)
{
return a<b?false:true;
}
int main()
{
int myints[] = {10,20,30,5,15};
vector<int> v(myints,myints+5);
vector<int>::iterator it;
make_heap(v.begin(), v.end(), comp);
cout << "initial min heap : " << v.front() << endl;
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
cout<<endl;
pop_heap (v.begin(),v.end());
v.pop_back();
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
cout<<endl;
}
परिणाम हैं::
initial min heap : 5
5 10 30 20 15
30 10 15 20
अब pop_heap, push_heap सही ढंग से न्यूनतम-ढेर बनाए रखने नहीं होगा यहाँ मैं क्या करने की कोशिश की है? क्या यह हासिल करने का कोई आसान तरीका है? धन्यवाद!
संपादित करें: क्षमा करें, मैंने मैन्युअल रूप से मैन्युअल रूप से जांच नहीं की है। हां, pop_heap या push_heap को comp पास करने से चाल चलनी चाहिए। हालांकि, आपका क्या मतलब है, मुझे बाहरी तुलनित्र का उपयोग नहीं करना चाहिए? यदि यह सही तरीका नहीं है, तो इसे प्राप्त करने का आम तरीका क्या है?
बड़ा मुद्दा यह है कि उसका तुलनित्र 'int' के ऑपरेटर> =' के बराबर है, जो सख्त कमजोर क्रमिक तुलनित्र नहीं है, और इस प्रकार अवैध है। – ildjarn
@ildjarn: धन्यवाद, तय है। –
क्षमा करें, मैंने मैन्युअल रूप से मैन्युअल जांच नहीं की है। हां, pop_heap या push_heap को comp पास करने से चाल चलनी चाहिए। हालांकि, आपका क्या मतलब है, मुझे बाहरी तुलनित्र का उपयोग नहीं करना चाहिए?यदि यह सही तरीका नहीं है, तो इसे प्राप्त करने का आम तरीका क्या है? – user268451