C ++ Priority_queue کا استعمال کیسے کریں؟

How Use C Priority_queue



C ++ میں ، قطار ایک فہرست ڈیٹا ڈھانچہ ہے جہاں فہرست میں ڈالنے والا پہلا عنصر ہٹانے والا پہلا عنصر ہوتا ہے ، جب ہٹانا ہوتا ہے۔ C ++ میں ترجیحی قطار یکساں ہے ، لیکن اس میں کچھ آرڈرنگ ہے۔ یہ وہ عنصر ہے جو سب سے بڑی قدر کے ساتھ پہلے ہٹایا جاتا ہے۔ ترجیحی قطار اب بھی ترتیب دی جا سکتی ہے تاکہ یہ کم از کم قیمت والا عنصر ہو جسے پہلے ہٹایا جائے۔ کسی بھی قطار میں کم از کم ہونا ضروری ہے۔ دھکا () فنکشن اور پاپ () فنکشن کی دھکا () فنکشن پچھلے حصے میں ایک نیا عنصر شامل کرتا ہے۔ عام قطار کے لیے ، پاپ () فنکشن پہلے عنصر کو ہٹا دیتا ہے۔ پاپ () فنکشن سب سے زیادہ ترجیح کے ساتھ عنصر کو ہٹاتا ہے ، جو آرڈرنگ اسکیم پر منحصر ہے ، سب سے بڑا یا چھوٹا ہوسکتا ہے۔

C ++ prior_queue استعمال کرنے کے لیے ، پروگرام کوڈ سے شروع ہونا چاہیے جیسے:







#شامل کریں
#شامل کریں
استعمال کرتے ہوئے نام کی جگہگھنٹے؛

اس میں قطار لائبریری پروگرام میں شامل ہے۔



پڑھنا جاری رکھنے کے لیے ، قاری کو C ++ کا بنیادی علم ہونا چاہیے تھا۔



مضمون کا مواد۔

بنیادی تعمیر۔

ڈیٹا سٹرکچر کو استعمال کرنے سے پہلے پہلے بنانا ہوگا۔ یہاں تعمیر کا مطلب ہے لائبریری کی قطار کی کلاس سے کسی چیز کو فوری طور پر نکالنا۔ قطار آبجیکٹ کا پروگرامر کے ذریعہ دیا گیا نام ہونا ضروری ہے۔ ترجیحی قطار بنانے کا آسان ترین نحو یہ ہے:





ترجیح_کیو<قسم>قطار نام؛

اس نحو کے ساتھ ، سب سے بڑی قدر پہلے ہٹا دی جاتی ہے۔ انسٹی ٹینشن کی ایک مثال یہ ہے:

ترجیح_کیو<int>pq؛

یا



ترجیح_کیو<چار>pq؛

ویکٹر اور ڈیک C ++ میں دو ڈیٹا ڈھانچے ہیں۔ ایک ترجیحی کیو ان دونوں میں سے کسی کے ساتھ بنائی جا سکتی ہے۔ ویکٹر ڈھانچے سے ترجیحی قطار بنانے کے لیے نحو یہ ہے:

ترجیح_کیو<قسم ، ویکٹر<ایک ہی قسم>، موازنہ کریں۔>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 عددی اقدار ملی ہیں۔ 20 ، 10۔

پاپ () فنکشن۔
یہ فنکشن سب سے زیادہ ترجیح کے ساتھ ویلیو کو ترجیح_کیو سے ہٹا دیتا ہے۔ اگر موازنہ کوڈ زیادہ ہے ، تو یہ عنصر کو سب سے چھوٹی قدر کے ساتھ ہٹا دے گا۔ اگر دوبارہ بلایا جائے تو ، یہ باقی عنصر کی چھوٹی قیمت کے ساتھ اگلے عنصر کو ہٹا دیتا ہے۔ دوبارہ بلایا گیا ، یہ اگلی سب سے چھوٹی قدر کو ہٹا دیتا ہے ، وغیرہ۔ یہ بیکار لوٹتا ہے۔ مندرجہ ذیل کوڈ اس کی وضاحت کرتا ہے:

ترجیح_کیو<چار، ویکٹر<چار>، زیادہ<int> >pq؛
pqدھکا('سے')؛pqدھکا('ج')؛pqدھکا('ب')؛pqدھکا('اور')؛pqدھکا('ڈی')؛

نوٹ کریں کہ کسی ممبر فنکشن کو کال کرنے کے لیے ، آبجیکٹ کے نام کے بعد ڈاٹ ، اور پھر فنکشن ہونا چاہیے۔

سب سے اوپر () فنکشن۔
کی پاپ () فنکشن اعلی ترجیح کی اگلی قدر کو ہٹا دیتا ہے ، لیکن اسے واپس نہیں کرتا ، جیسا کہ۔ پاپ () ایک باطل فعل ہے کا استعمال کرتے ہیں اوپر () سب سے زیادہ ترجیح کی قدر جاننے کے لیے کام کریں جو کہ اگلا ہٹانا ہے۔ کی اوپر () function priorit_queue میں اعلیٰ ترجیح کی قدر کی ایک کاپی واپس کرتا ہے۔ مندرجہ ذیل کوڈ ، جہاں سب سے زیادہ ترجیح کی اگلی قدر کم سے کم قیمت ہے ، اس کی وضاحت کرتا ہے۔

ترجیح_کیو<چار، ویکٹر<چار>، زیادہ<int> >pq؛
pqدھکا('سے')؛pqدھکا('ج')؛pqدھکا('ب')؛pqدھکا('اور')؛pqدھکا('ڈی')؛
چار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= ؛ intیہ 2= ؛ intیہ 3= ؛ intیہ 4= ؛ intیہ 5= ؛
pqAدھکا(یہ 1)؛pqAدھکا(یہ 2)؛pqAدھکا(یہ 3)؛pqAدھکا(یہ 4)؛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؛
سٹرنگ ایس 1۔=تار('قلم')، s2=تار('پینسل')، s3=تار('مشق کی کتاب')، s4=تار('ٹیکسٹ بک')، s5۔=تار('حکمران')؛

pq1.دھکا(s1)؛pq1.دھکا(s2)؛pq1.دھکا(s3)؛pq1.دھکا(s4)؛pq1.دھکا(s5)؛
جبکہ(!pq1.خالی())
{
لاگت <<pq1.اوپر() << ''؛
pq1.پاپ()؛
} لاگت<<'n'؛

پیداوار یہ ہے:

& emsp text ٹیکسٹ بک & emsp ruler حکمران & emsp pen پنسل & emsp pen قلم & emsp exercise ورزش کی کتاب

دیگر ترجیحی قطار کی تعمیرات۔

ایک ویکٹر سے واضح تخلیق۔
ایک ترجیحی قطار ویکٹر سے واضح طور پر بنائی جا سکتی ہے جیسا کہ درج ذیل کوڈ سے ظاہر ہوتا ہے:

#شامل کریں
ویکٹر<int>وی ٹی آر= {10۔،30۔،بیس،پچاس،40۔}؛

ترجیح_کیو<int>pq(وی ٹی آرشروع کریں()، vtrختم())؛

جبکہ(!pqخالی())
{
لاگت <<pqاوپر() << ''؛
pqپاپ()؛
} لاگت<<'n'؛

آؤٹ پٹ ہے: 50 40 30 20 10. اس بار ، ویکٹر ہیڈر کو بھی شامل کرنا ہوگا۔ کنسٹرکٹر فنکشن کے دلائل ویکٹر کے آغاز اور اختتامی اشارے لیتے ہیں۔ ویکٹر کے لیے ڈیٹا کی قسم اور ترجیحی_کیو کے لیے ڈیٹا کی قسم ایک جیسی ہونی چاہیے۔

کم از کم قیمت کو ترجیح دینے کے لیے ، کنسٹرکٹر کے لیے اعلان یہ ہوگا:

ترجیح_کیو<int، ویکٹر<int>، زیادہ>int> >pq(وی ٹی آرشروع کریں()، vtrختم())؛

ایک صف سے واضح تخلیق۔
ایک صف سے ایک ترجیحی قطار واضح طور پر بنائی جاسکتی ہے جیسا کہ درج ذیل کوڈ سے ظاہر ہوتا ہے:

intآمد[] = {10۔،30۔،بیس،پچاس،40۔}؛

ترجیح_کیو<int>pq(آری ، آری+)؛

جبکہ(!pqخالی())
{
لاگت <<pqاوپر() << ''؛
pqپاپ()؛
} لاگت<<'n'؛

آؤٹ پٹ ہے: 50 40 30 20 10. کنسٹرکٹر فنکشن کے دلائل سرنی کے آغاز اور اختتامی اشارے لیتے ہیں۔ arr اسٹارٹ پوائنٹر لوٹاتا ہے ، arr+5 پوائنٹر کو صف کے بالکل پیچھے لوٹاتا ہے ، اور 5 سرنی کا سائز ہے۔ صف کے لیے ڈیٹا کی قسم اور ترجیحی_کیو کے لیے ڈیٹا کی قسم ایک جیسی ہونی چاہیے۔

کم از کم قیمت کو ترجیح دینے کے لیے ، کنسٹرکٹر کے لیے اعلان یہ ہوگا:

ترجیح_کیو<int، ویکٹر<int>، زیادہ<int> >pq(آری ، آری+)؛

نوٹ: C ++ میں ، prior_queue دراصل ایک اڈاپٹر کہلاتا ہے ، نہ کہ صرف ایک کنٹینر۔

اپنی مرضی کے مطابق کوڈ

تمام اقدار کو ترجیحی قطار میں چڑھتے ہوئے یا تمام اترتے ہوئے ترجیحی قطار کا واحد آپشن نہیں ہے۔ مثال کے طور پر ، زیادہ سے زیادہ ڈھیر کے لیے 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 ++ ترجیح_کیو ایک پہلی پہلی پہلی قطار ہے۔ رکن کی تقریب ، دھکا () ، قطار میں ایک نئی قدر شامل کرتا ہے۔ رکن کی تقریب ، اوپر () ، قطار میں سب سے اوپر کی قیمت پڑھتا ہے۔ رکن کی تقریب ، پاپ () ، قطار کی اوپری قیمت واپس کیے بغیر ہٹاتا ہے۔ رکن کی تقریب ، خالی () ، چیک کرتا ہے کہ قطار خالی ہے یا نہیں۔ تاہم ، prior_queue قطار سے مختلف ہے ، اس میں ، یہ کچھ ترجیحی الگورتھم کی پیروی کرتا ہے۔ یہ سب سے بڑا ، پہلے سے آخر تک ، یا کم از کم ، پہلے سے آخری تک ہوسکتا ہے۔ معیار (الگورتھم) پروگرامر سے طے شدہ بھی ہو سکتا ہے۔