C ++ முன்னுரிமை_கியூவை எவ்வாறு பயன்படுத்துவது?

How Use C Priority_queue



C ++ இல், ஒரு வரிசை என்பது ஒரு பட்டியல் தரவு கட்டமைப்பாகும், அங்கு பட்டியலில் வைக்கப்படும் முதல் உறுப்பு அகற்றப்படும்போது, ​​அகற்றப்பட வேண்டிய முதல் உறுப்பு ஆகும். C ++ இல் முன்னுரிமை வரிசை ஒத்திருக்கிறது, ஆனால் சில வரிசைப்படுத்தல்கள் உள்ளன; அது முதலில் அகற்றப்படும் மிகப்பெரிய மதிப்பு கொண்ட உறுப்பு. முன்னுரிமை வரிசையை இன்னும் கட்டமைக்க முடியும், அதனால் அது முதலில் அகற்றப்படும் குறைந்தபட்ச மதிப்பு கொண்ட உறுப்பு ஆகும். எந்த வரிசையிலும் குறைந்தது இருக்க வேண்டும் மிகுதி () செயல்பாடு மற்றும் பாப் () செயல்பாடு தி மிகுதி () செயல்பாடு மீண்டும் ஒரு புதிய உறுப்பைச் சேர்க்கிறது. சாதாரண வரிசையில், தி பாப் () செயல்பாடு எப்போதும் தள்ளப்பட்ட முதல் உறுப்பை நீக்குகிறது. முன்னுரிமை வரிசையில், தி பாப் () செயல்பாடு அதிக முன்னுரிமை கொண்ட உறுப்பை நீக்குகிறது, இது மிகப்பெரிய அல்லது சிறியதாக இருக்கலாம், வரிசைப்படுத்தும் திட்டத்தைப் பொறுத்து.

சி ++ முன்னுரிமை_ வரிசையைப் பயன்படுத்த, நிரல் இது போன்ற குறியீட்டில் தொடங்க வேண்டும்:







#சேர்க்கிறது
#சேர்க்கிறது
பயன்படுத்தி பெயர்வெளிமணி;

இது நிரலில் வரிசை நூலகத்தை உள்ளடக்கியது.



தொடர்ந்து படிக்க, வாசகருக்கு சி ++ பற்றிய அடிப்படை அறிவு இருந்திருக்க வேண்டும்.



கட்டுரை உள்ளடக்கம்

அடிப்படை கட்டுமானம்

தரவு கட்டமைப்பைப் பயன்படுத்துவதற்கு முன்பு முதலில் கட்டமைக்க வேண்டும். இங்கே கட்டுமானம் என்பது நூலகத்தின் வரிசை வகுப்பிலிருந்து ஒரு பொருளை நிறுவுவதாகும். வரிசை பொருளுக்கு புரோகிராமரால் கொடுக்கப்பட்ட ஒரு பெயர் இருக்க வேண்டும். முன்னுரிமை வரிசையை உருவாக்குவதற்கான எளிய தொடரியல்:





முன்னுரிமை_ வரிசை<வகை>வரிசை பெயர்;

இந்த தொடரியல் மூலம், மிகப்பெரிய மதிப்பு முதலில் அகற்றப்படும். உடனடிக்கு ஒரு எடுத்துக்காட்டு:

முன்னுரிமை_ வரிசை<int>pq;

அல்லது



முன்னுரிமை_ வரிசை<கரி>pq;

திசையன் மற்றும் டெக்யூ ஆகியவை சி ++ இல் இரண்டு தரவு கட்டமைப்புகள். முன்னுரிமை_ வரிசை ஒன்றை உருவாக்கலாம். திசையன் கட்டமைப்பிலிருந்து முன்னுரிமை வரிசையை உருவாக்குவதற்கான தொடரியல்:

முன்னுரிமை_ வரிசை<வகை, திசையன்<அதே வகை>, ஒப்பிடுக>pq;

இந்த உடனடிக்கு ஒரு எடுத்துக்காட்டு:

முன்னுரிமை_ வரிசை<int, திசையன்<int>, குறைவாக<int> >pq;

அறிவிப்பின் முடிவில்> மற்றும்> இடையே உள்ள இடைவெளியைக் கவனியுங்கள். இது >> உடன் குழப்பத்தை தடுக்கிறது. இயல்புநிலை ஒப்பீட்டு குறியீடு குறைவாக உள்ளது, அதாவது மிகப் பெரியது, முதல் மதிப்பு அவசியமில்லை, முதலில் அகற்றப்படும். எனவே, உருவாக்கம் அறிக்கையை வெறுமனே இவ்வாறு எழுதலாம்:

முன்னுரிமை_ வரிசை<int, திசையன்<int> >pq;

குறைந்தபட்ச மதிப்பை முதலில் அகற்ற வேண்டும் என்றால், அறிக்கை இருக்க வேண்டும்:

முன்னுரிமை_ வரிசை<int, திசையன்<int>, பெரிய<int> >pq;

முக்கிய உறுப்பினர் செயல்பாடுகள்

மிகுதி () செயல்பாடு
இந்த செயல்பாடு ஒரு மதிப்பு, அதன் வாதம், முன்னுரிமை_ வரிசையில் தள்ளுகிறது. அது வெற்றிடத்தைத் தருகிறது. பின்வரும் குறியீடு இதை விளக்குகிறது:

முன்னுரிமை_ வரிசை<int>pq;

pq.மிகுதி(10);
pq.மிகுதி(30);
pq.மிகுதி(இருபது);
pq.மிகுதி(ஐம்பது);
pq.மிகுதி(40);

இந்த முன்னுரிமை_ வரிசை 10, 30, 20, 50, 40 என்ற வரிசையில் 5 முழு மதிப்புகளைப் பெற்றுள்ளது. இந்த உறுப்புகள் அனைத்தும் முன்னுரிமை வரிசையில் இருந்து வெளியேற வேண்டும் என்றால், அவை 50, 40, 30 வரிசையில் வரும் 20, 10.

பாப் () செயல்பாடு
இந்த செயல்பாடு முன்னுரிமை_ வரிசையில் இருந்து அதிக முன்னுரிமையுடன் மதிப்பை நீக்குகிறது. ஒப்பீட்டு குறியீடு அதிகமாக இருந்தால், அது மிகச்சிறிய மதிப்புடன் உறுப்பை அகற்றும். மீண்டும் அழைத்தால், அது மீதமுள்ள மிகச்சிறிய மதிப்புடன் அடுத்த உறுப்பை நீக்குகிறது; மீண்டும் அழைக்கப்பட்டது, அது தற்போதுள்ள அடுத்த மிகச்சிறிய மதிப்பை நீக்குகிறது, மற்றும் பல. அது வெற்றிடத்தைத் தருகிறது. பின்வரும் குறியீடு இதை விளக்குகிறது:

முன்னுரிமை_ வரிசை<கரி, திசையன்<கரி>, பெரிய<int> >pq;
pq.மிகுதி('க்கு');pq.மிகுதி('சி');pq.மிகுதி('b');pq.மிகுதி('மற்றும்');pq.மிகுதி('d');

ஒரு உறுப்பினர் செயல்பாட்டை அழைக்க பொருளின் பெயரை ஒரு புள்ளியும், பின்னர் செயல்பாட்டையும் பின்பற்ற வேண்டும்.

மேல் () செயல்பாடு
தி பாப் () செயல்பாடு அதிக முன்னுரிமையின் அடுத்த மதிப்பை நீக்குகிறது, ஆனால் அதை திருப்பித் தரவில்லை பாப் () ஒரு வெற்றிட செயல்பாடு ஆகும். பயன்படுத்த மேல் () அடுத்து அகற்றப்பட வேண்டிய மிக உயர்ந்த முன்னுரிமையின் மதிப்பை அறியும் வகையில் செயல்படுகிறது. தி மேல் () முன்னுரிமை_ வரிசையில் அதிக முன்னுரிமையின் மதிப்பின் நகலை செயல்பாடு வழங்குகிறது. பின்வரும் குறியீடானது, அதிக முன்னுரிமையின் அடுத்த மதிப்பு குறைந்த மதிப்பாக இருக்கும், இதை விளக்குகிறது

முன்னுரிமை_ வரிசை<கரி, திசையன்<கரி>, பெரிய<int> >pq;
pq.மிகுதி('க்கு');pq.மிகுதி('சி');pq.மிகுதி('b');pq.மிகுதி('மற்றும்');pq.மிகுதி('d');
கரிch1=pq.மேல்();pq.பாப்();
கரிch2=pq.மேல்();pq.பாப்();
கரிch3=pq.மேல்();pq.பாப்();
கரிch4=pq.மேல்();pq.பாப்();
கரிch5=pq.மேல்();pq.பாப்();

செலவு<<ch1<<''<<ch2<<''<<ch3<<''<<ch4<<''<<ch5<<' n';

வெளியீடு 'a' 'b' 'c' 'd' 'e'.

வெற்று () செயல்பாடு
ஒரு புரோகிராமர் பயன்படுத்தினால் மேல் () ஒரு வெற்று முன்னுரிமை_ வரிசையில் செயல்படுங்கள், வெற்றிகரமாக தொகுக்கப்பட்ட பிறகு, அவர் பிழை செய்தியைப் பெறுவார்:

பிரிவு தவறு(மையம் கொட்டப்பட்டது)

எனவே, பயன்படுத்துவதற்கு முன்பு முன்னுரிமை வரிசை காலியாக இல்லையா என்பதை எப்போதும் சரிபார்க்கவும் மேல் () செயல்பாடு தி காலியாக() உறுப்பினர் செயல்பாடு ஒரு பூலைத் தருகிறது, உண்மை, வரிசை காலியாக இருந்தால், மற்றும் வரிசை காலியாக இல்லை என்றால் பொய். பின்வரும் குறியீடு இதை விளக்குகிறது:

முன்னுரிமை_ வரிசை<int>pq;
inti1= 10; inti2= 30; inti3= இருபது; inti4= ஐம்பது; inti5= 40;
pq.மிகுதி(i1);pq.மிகுதி(i2);pq.மிகுதி(i3);pq.மிகுதி(i4);pq.மிகுதி(i5);

போது(!pq.காலியாக())
{
செலவு <<pq.மேல்() << '';
pq.பாப்();
}
செலவு << ' n';

பிற முன்னுரிமை வரிசை செயல்பாடுகள்

அளவு () செயல்பாடு
இந்த குறியீடு முன்னுரிமை வரிசையின் நீளத்தை அளிக்கிறது, பின்வரும் குறியீடு விளக்குகிறது:

முன்னுரிமை_ வரிசை<int>pq;
inti1= 10; inti2= 30; inti3= இருபது; inti4= ஐம்பது; inti5= 40;
pq.மிகுதி(i1);pq.மிகுதி(i2);pq.மிகுதி(i3);pq.மிகுதி(i4);pq.மிகுதி(i5);

intலென்=pq.அளவு();
செலவு <<லென்<< ' n';

வெளியீடு 5 ஆகும்.

இடமாற்று () செயல்பாடு
இரண்டு முன்னுரிமை_க் குறியீடுகள் ஒரே வகை மற்றும் அளவுகளில் இருந்தால், பின்வரும் குறியீடு காண்பிப்பது போல, இந்த செயல்பாட்டால் அவற்றை மாற்றலாம்:

முன்னுரிமை_ வரிசை<int>pq1;
inti1= 10; inti2= 30; inti3= இருபது; inti4= ஐம்பது; inti5= 40;
pq1.மிகுதி(i1);pq1.மிகுதி(i2);pq1.மிகுதி(i3);pq1.மிகுதி(i4);pq1.மிகுதி(i5);

முன்னுரிமை_ வரிசை<int>pqA;
intஅது 1= 1; intஅது 2= 3; intஅது 3= 2; intit4= 5; intஅது 5= 4;
pqA.மிகுதி(அது 1);pqA.மிகுதி(அது 2);pqA.மிகுதி(அது 3);pqA.மிகுதி(it4);pqA.மிகுதி(அது 5);

pq1.இடமாற்றம்(pqA);

போது(!pq1.காலியாக())
{
செலவு <<pq1.மேல்() << '';
pq1.பாப்();
} செலவு<<' n';

போது(!pqA.காலியாக())
{
செலவு <<pqA.மேல்() << '';
pqA.பாப்();
} செலவு<<' n';

வெளியீடு:

& emsp; 5 & emsp; 4 & emsp; 3 & emsp; 2 & emsp; 1
& emsp; 50 & emsp; 40 & emsp; 30 & emsp; 20 & emsp; 10

எம்ப்லேஸ் () ஃபக்ஷன்
தி எம்ப்லேஸ் () செயல்பாடு புஷ் செயல்பாட்டைப் போன்றது. பின்வரும் குறியீடு இதை விளக்குகிறது:

முன்னுரிமை_ வரிசை<int>pq1;
inti1= 10; inti2= 30; inti3= இருபது; inti4= ஐம்பது; inti5= 40;
pq1.எம்ப்லேஸ்(i1);pq1.எம்ப்லேஸ்(i2);pq1.எம்ப்லேஸ்(i3);pq1.எம்ப்லேஸ்(i4);pq1.எம்ப்லேஸ்(i5);

போது(!pq1.காலியாக())
{
செலவு <<pq1.மேல்() << '';
pq1.பாப்();
} செலவு<<' n';

வெளியீடு:

50 40 30 20 10

சரம் தரவு

சரங்களை ஒப்பிடும் போது, ​​சரம் வர்க்கம் பயன்படுத்தப்பட வேண்டும் மற்றும் சரம் இலக்கியங்களின் நேரடிப் பயன்பாடு அல்ல, ஏனெனில் அது சுட்டிகளை ஒப்பிடும், உண்மையான சரங்களை அல்ல. பின்வரும் குறியீடு சரம் வகுப்பு எவ்வாறு பயன்படுத்தப்படுகிறது என்பதைக் காட்டுகிறது:

#சேர்க்கிறது
முன்னுரிமை_ வரிசை<லேசான கயிறு>pq1;
சரம் s1=லேசான கயிறு('பேனா'), s2=லேசான கயிறு('எழுதுகோல்'), எஸ் 3=லேசான கயிறு('பயிற்சி புத்தகம்'), எஸ் 4=லேசான கயிறு('பாடநூல்'), s5=லேசான கயிறு('ஆட்சியாளர்');

pq1.மிகுதி(s1);pq1.மிகுதி(s2);pq1.மிகுதி(s3);pq1.மிகுதி(s4);pq1.மிகுதி(s5);
போது(!pq1.காலியாக())
{
செலவு <<pq1.மேல்() << '';
pq1.பாப்();
} செலவு<<' n';

வெளியீடு:

& emsp; உரை புத்தகம் & emsp; ஆட்சியாளர் & emsp; பென்சில் & emsp; பேனா & emsp; உடற்பயிற்சி புத்தகம்

பிற முன்னுரிமை வரிசை கட்டுமானங்கள்

ஒரு திசையன் இருந்து வெளிப்படையான உருவாக்கம்
பின்வரும் குறியீடு காண்பிப்பது போல் ஒரு திசையனிலிருந்து ஒரு முன்னுரிமை வரிசை வெளிப்படையாக உருவாக்கப்படலாம்:

#சேர்க்கிறது
திசையன்<int>vtr= {10,30,இருபது,ஐம்பது,40};

முன்னுரிமை_ வரிசை<int>pq(vtr.தொடங்க(), vtr.முடிவு());

போது(!pq.காலியாக())
{
செலவு <<pq.மேல்() << '';
pq.பாப்();
} செலவு<<' n';

வெளியீடு: 50 40 30 20 10. இந்த முறை, திசையன் தலைப்பும் சேர்க்கப்பட வேண்டும். கட்டமைப்பாளர் செயல்பாட்டிற்கான வாதங்கள் திசையனின் தொடக்க மற்றும் இறுதி சுட்டிகளை எடுக்கும். திசையனுக்கான தரவு வகை மற்றும் முன்னுரிமை_ வரிசைக்கான தரவு வகை ஒரே மாதிரியாக இருக்க வேண்டும்.

குறைந்தபட்ச மதிப்பை முன்னுரிமை செய்வதற்காக, கட்டமைப்பாளருக்கான அறிவிப்பு:

முன்னுரிமை_ வரிசை<int, திசையன்<int>, பெரிய>int> >pq(vtr.தொடங்க(), vtr.முடிவு());

ஒரு வரிசையில் இருந்து வெளிப்படையான உருவாக்கம்
பின்வரும் குறியீடு காண்பிப்பது போல ஒரு வரிசையில் இருந்து ஒரு முன்னுரிமை வரிசை வெளிப்படையாக உருவாக்கப்படலாம்:

intஅர்[] = {10,30,இருபது,ஐம்பது,40};

முன்னுரிமை_ வரிசை<int>pq(arr, arr+5);

போது(!pq.காலியாக())
{
செலவு <<pq.மேல்() << '';
pq.பாப்();
} செலவு<<' n';

வெளியீடு: 50 40 30 20 10. கட்டமைப்பாளர் செயல்பாட்டிற்கான வாதங்கள் வரிசையின் தொடக்க மற்றும் இறுதி சுட்டிகளை எடுக்கும். arr ஸ்டார்ட் பாயிண்டரைத் தருகிறது, arr+5 அர்ரேயைக் கடந்த பாயிண்டரைத் தருகிறது, மேலும் வரிசை அளவு 5 ஆகும். வரிசைக்கான தரவு வகை மற்றும் முன்னுரிமை_ வரிசைக்கான தரவு வகை ஒரே மாதிரியாக இருக்க வேண்டும்.

குறைந்தபட்ச மதிப்பை முன்னுரிமை செய்வதற்காக, கட்டமைப்பாளருக்கான அறிவிப்பு:

முன்னுரிமை_ வரிசை<int, திசையன்<int>, பெரிய<int> >pq(arr, arr+5);

குறிப்பு: C ++ இல், முன்னுரிமை_ வரிசை உண்மையில் அடாப்டர் என்று அழைக்கப்படுகிறது, ஒரு கொள்கலன் மட்டுமல்ல.

தனிப்பயன் ஒப்பீட்டு குறியீடு

முன்னுரிமை வரிசையில் அனைத்து மதிப்புகளும் ஏறுதல் அல்லது இறங்குதல் ஆகியவை முன்னுரிமை வரிசையில் ஒரே வழி அல்ல. எடுத்துக்காட்டாக, அதிகபட்ச குவியலுக்கான 11 முழு எண்களின் பட்டியல்:

88, 86, 87, 84, 82, 79,74, 80, 81 ,, 64, 69

அதிகபட்ச மதிப்பு 88. இதைத் தொடர்ந்து இரண்டு எண்கள் உள்ளன: 86 மற்றும் 87, இது 88 க்கும் குறைவாக உள்ளது. மீதமுள்ள எண்கள் இந்த மூன்று எண்களை விட குறைவாக உள்ளன, ஆனால் உண்மையில் வரிசையில் இல்லை. பட்டியலில் இரண்டு வெற்று செல்கள் உள்ளன. 84 மற்றும் 82 எண்கள் 86 க்கும் குறைவாக உள்ளன. 79 மற்றும் 74 எண்கள் 87 க்கும் குறைவாக உள்ளன. 80 மற்றும் 81 எண்கள் 84 க்கும் குறைவாக உள்ளன. 64 மற்றும் 69 எண்கள் 79 க்கும் குறைவாக உள்ளன.

எண்களை வைப்பது அதிகபட்ச குவியல் அளவுகோல்களைப் பின்பற்றுகிறது-பின்னர் பார்க்கவும். முன்னுரிமை_ வரிசையில் அத்தகைய திட்டத்தை வழங்க, புரோகிராமர் தனது சொந்த ஒப்பீட்டு குறியீட்டை வழங்க வேண்டும் - பின்னர் பார்க்கவும்.

முடிவுரை

ஒரு C ++ முன்னுரிமை_ வரிசை முதலில் முதல் வரிசையில் உள்ளது. உறுப்பினர் செயல்பாடு, மிகுதி (), வரிசையில் ஒரு புதிய மதிப்பைச் சேர்க்கிறது. உறுப்பினர் செயல்பாடு, மேல் (), வரிசையில் மேல் மதிப்பைப் படிக்கிறது. உறுப்பினர் செயல்பாடு, பாப் (), வரிசையின் மேல் மதிப்பு திரும்பாமல் நீக்குகிறது. உறுப்பினர் செயல்பாடு, காலியாக(), வரிசை காலியாக உள்ளதா என சரிபார்க்கிறது. இருப்பினும், முன்னுரிமை_ வரிசை வரிசையில் இருந்து வேறுபடுகிறது, அதில், இது சில முன்னுரிமை வழிமுறையைப் பின்பற்றுகிறது. இது முதல் முதல் கடைசி வரை அல்லது குறைந்தபட்சம் முதல் முதல் கடைசி வரை மிகப் பெரியதாக இருக்கலாம். அளவுகோல் (அல்காரிதம்) புரோகிராமரால் வரையறுக்கப்படலாம்.