C ++ غیر منظم نقشہ کیسے استعمال کریں۔

How Use C Unordered Map



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

کلاس اور آبجیکٹ۔

ایک کلاس متغیرات اور افعال کا ایک مجموعہ ہے جو مل کر کام کرتے ہیں ، جہاں متغیرات کو مقرر کردہ اقدار نہیں ہیں۔ جب متغیرات کو اقدار تفویض کی جاتی ہیں ، کلاس ایک شے بن جاتی ہے۔ ایک ہی طبقے کو دی گئی مختلف اقدار مختلف اشیاء کا نتیجہ ہیں۔ یعنی مختلف اشیاء مختلف اقدار کے ساتھ ایک ہی کلاس ہیں۔ کہا جاتا ہے کہ کسی کلاس سے کوئی شے بنانا اس شے کو فوری بنانا ہے۔







نام، unordered_map ، ایک کلاس ہے۔ unordered_map کلاس سے بنائی گئی ایک شے میں ایک پروگرامر کا منتخب کردہ نام ہوتا ہے۔



ایک فنکشن جو کلاس سے تعلق رکھتا ہے کلاس سے کسی شے کو فوری طور پر درکار ہوتا ہے۔ C ++ میں ، اس فنکشن کا وہی نام ہے جو کلاس کا نام ہے۔ کلاس سے بنائی گئی چیزیں (فوری طور پر) پروگرامر کے ذریعہ ان کو مختلف نام دیئے گئے ہیں۔



کلاس سے ایک شے بنانے کا مطلب ہے شے کی تعمیر اس کا مطلب یہ بھی ہے کہ فوری طور پر





ایک C ++ پروگرام جو unordered_map کلاس استعمال کرتا ہے ، فائل کے اوپری حصے میں درج ذیل لائنوں سے شروع ہوتا ہے۔

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

پہلی لائن ان پٹ/آؤٹ پٹ کے لیے ہے۔ دوسری لائن پروگرام کو unordered_map کلاس کی تمام خصوصیات استعمال کرنے کی اجازت دینا ہے۔ تیسری لائن پروگرام کو معیاری نام کی جگہ پر نام استعمال کرنے کی اجازت دیتی ہے۔



ایک فنکشن کو اوورلوڈ کرنا۔

جب دو یا زیادہ مختلف فنکشن دستخطوں کا ایک ہی نام ہوتا ہے ، تو کہا جاتا ہے کہ یہ نام اوورلوڈ ہے۔ جب ایک فنکشن کہا جاتا ہے تو ، دلائل کی تعداد اور قسم ، اس بات کا تعین کریں کہ اصل میں کون سا فنکشن انجام دیا گیا ہے۔

تعمیر/کاپی تعمیر۔

سادہ تعمیر۔

ایک غیر منظم نقشہ بنایا جاسکتا ہے اور اقدار کو درج ذیل کے طور پر تفویض کیا جاسکتا ہے۔

unordered_map<const چار const چار*>امپ؛

امپ['کیلا'] = 'پیلا'؛
امپ['انگور'] = 'سبز'؛
امپ['انجیر'] = 'جامنی'؛

اعلامیہ کا آغاز سانچے کی مہارت سے ہوتا ہے جس میں کلید اور قدر کے جوڑوں کی اقسام ہوتی ہیں۔ اس کے بعد نقشے کے لیے پروگرامر کا منتخب کردہ نام ہے۔ پھر ایک سیمیکالون. دوسرا کوڈ طبقہ دکھاتا ہے کہ ان کی چابیاں کو اقدار کیسے تفویض کی جائیں۔
تعمیر کی طرف سے Initializer_list
یہ مندرجہ ذیل کیا جا سکتا ہے:

unordered_map<const چار const چار*>امپ({{'کیلا'، 'پیلا'}،
{'انگور'، 'سبز'}، {'انجیر'، 'جامنی'}})؛

Initializer_list تفویض کرکے تعمیر۔
مثال:

unordered_map<const چار const چار*>امپ= {{'کیلا'، 'پیلا'}،
{'انگور'، 'سبز'}، {'انجیر'، 'جامنی'}}؛

ایک اور غیر منظم نقشہ کاپی کرکے تعمیر۔
مثال:

unordered_map<const چار const چار*>umap1({{'کیلا'، 'پیلا'}،
{'انگور'، 'سبز'}، {'انجیر'، 'جامنی'}})؛
unordered_map<const چار const چار*>umap2(umap1)؛

جوڑی عنصر۔

مندرجہ ذیل کوڈ ظاہر کرتا ہے کہ جوڑی عنصر کو کیسے بنایا جائے اور اس تک رسائی حاصل کی جائے:

جوڑا<چار، const چار*>پی آر= {'ڈی'، 'ہو'}؛
لاگت<<پی آرپہلا << 'n'؛
لاگت<<پی آردوسرا << 'n'؛

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

د
ہو

پہلا اور دوسرا جوڑے کی دو اشیاء کے لیے مخصوص الفاظ ہیں۔ جوڑے میں اقدار کو پہلے اور دوسرے کا استعمال کرتے ہوئے تبدیل کیا جا سکتا ہے۔

ایک جوڑے کو بلایا جاتا ہے ، غیر ترتیب شدہ نقشے کے عنوان میں ویلیو ٹائپ۔

unordered_map عنصر تک رسائی۔

mapped_type & operator [] (key_type && k)
متعلقہ کلید کی قدر لوٹاتا ہے۔ مثال:

unordered_map<const چار const چار*>امپ؛

امپ['کیلا'] = 'پیلا'؛
امپ['انگور'] = 'سبز'؛
امپ['انجیر'] = 'جامنی'؛

const چار *ٹھیک ہے=امپ['انگور']؛

لاگت<<ٹھیک ہے<<'n'؛

آؤٹ پٹ ہے: سبز۔ اقدار اسی طرح تفویض کی جا سکتی ہیں - اوپر دیکھیں۔

unordered_map صلاحیت۔

size_type size () const noexcept۔
نقشے میں جوڑوں کی تعداد لوٹاتا ہے۔

unordered_map<const چار const چار*>امپ؛

امپ['کیلا'] = 'پیلا'؛
امپ['انگور'] = 'سبز'؛
امپ['انجیر'] = 'جامنی'؛

لاگت<<امپسائز() <<'n'؛

آؤٹ پٹ 3 ہے۔

bool خالی () const noexcept۔

اگر نقشے میں کوئی جوڑا نہ ہو تو سچ کے لیے 1 لوٹاتا ہے ، اور اگر اس کے جوڑے ہوں تو 0 غلط کے لیے لوٹتا ہے۔ مثال:

unordered_map<const چار const چار*>امپ؛
لاگت<<امپخالی() <<'n'؛

آؤٹ پٹ 1 ہے۔

ریٹرننگ آئٹریٹرز اور غیر منظم نقشہ کلاس۔

ایک تکرار ایک پوائنٹر کی طرح ہے لیکن اس کی پوائنٹر سے زیادہ فعالیت ہے۔

شروع () کوئی بات نہیں۔

ایک تکرار کرنے والا لوٹاتا ہے جو نقشہ آبجیکٹ کے پہلے جوڑے کی طرف اشارہ کرتا ہے ، جیسا کہ درج ذیل کوڈ کے حصے میں ہے:

unordered_map<const چار const چار*>امپ؛

امپ['کیلا'] = 'پیلا'؛امپ['انگور'] = 'سبز'؛امپ['انجیر'] = 'جامنی'؛

unordered_map<const چار const چار*> ::تکرار کرنے والااسے=امپشروع کریں()؛
جوڑا<const چار const چار*>پی آر= *اسے؛
لاگت<<پی آرپہلا << '،' <<پی آردوسرا << 'n'؛

پیداوار ہے: انجیر ، جامنی۔ نقشہ غیر آرڈر ہے۔

start () const noexcept؛

ایک تکرار کرنے والا لوٹاتا ہے جو نقشہ آبجیکٹ کلیکشن کے پہلے عنصر کی طرف اشارہ کرتا ہے۔ جب آبجیکٹ کی تعمیر const سے پہلے ہوتی ہے تو ، start () const کی بجائے start () const پر عمل کیا جاتا ہے۔ اس حالت کے تحت ، آبجیکٹ میں موجود عناصر کو تبدیل نہیں کیا جا سکتا۔ یہ مندرجہ ذیل کوڈ میں استعمال ہوتا ہے ، مثال کے طور پر۔

constunordered_map<const چار const چار*>امپ({{'کیلا'، 'پیلا'}،
{'انگور'، 'سبز'}، {'انجیر'، 'جامنی'}})؛

unordered_map<const چار const چار*> ::const_iteratorاسے=امپشروع کریں()؛
جوڑا<const چار const چار*>پی آر= *اسے؛
لاگت<<پی آرپہلا << '،' <<پی آردوسرا << 'n'؛

پیداوار ہے: انجیر ، جامنی۔ نقشہ غیر آرڈر ہے۔ نوٹ کریں کہ const_iterator اس بار استعمال کیا گیا ہے ، صرف تکرار کرنے والے کی بجائے ، لوٹا ہوا تکرار وصول کرنے کے لیے۔

اختتام () نہیں۔

ایک تکرار کرنے والا لوٹاتا ہے جو نقشہ آبجیکٹ کے آخری عنصر سے فوری طور پر اشارہ کرتا ہے۔

end () const noexcept

ایک تکرار کرنے والا لوٹاتا ہے جو نقشہ آبجیکٹ کے آخری عنصر سے فوری طور پر اشارہ کرتا ہے۔ جب نقشہ آبجیکٹ کی تعمیر const سے پہلے ہوتی ہے تو ، end () const کی بجائے end () const کا اظہار کیا جاتا ہے۔

unordered_map آپریشنز

تکراری تلاش (const key_type & k)

نقشے میں دی گئی کلید کے جوڑے کی تلاش۔ اگر یہ مل جاتا ہے تو ، یہ تکرار کرنے والا لوٹاتا ہے۔ اگر نہیں ملا تو ، یہ ایک تکرار کرنے والا لوٹاتا ہے جو نقشے کے اختتام کی طرف اشارہ کرتا ہے ، جو جوڑا نہیں ہے۔ مندرجہ ذیل کوڈ ظاہر کرتا ہے کہ اس ممبر فنکشن کو کیسے استعمال کیا جائے:

unordered_map<چار،چار>امپ؛

امپ['سے'] = 'ب'؛امپ['ج'] = 'ڈی'؛امپ['اور'] = 'f'؛

unordered_map<چار،چار> ::تکرار کرنے والااسے=امپمل('ج')؛
اگر (امپمل('ج') ! =امپختم())
{
جوڑا<چار،چار>پی آر= *اسے؛
لاگت<<پی آرپہلا << '،' <<پی آردوسرا << 'n'؛
}

آؤٹ پٹ ہے: سی ، ڈی۔

const_iterator find (const key_type & k) const؛

فنکشن کے اس ورژن کو کہا جاتا ہے ، اگر غیر منظم نقشہ کی تخلیق const سے شروع ہوتی ہے ، جس سے نقشے کے تمام عناصر صرف پڑھنے کے قابل ہوجاتے ہیں۔

unordered_map موڈیفائرز

جوڑا داخل کریں (value_type && obj)
غیر منظم نقشہ کا مطلب ہے کہ جوڑے کسی ترتیب میں نہیں ہیں۔ لہذا ، پروگرام جوڑی کو کسی بھی جگہ داخل کرتا ہے جہاں اسے مناسب لگتا ہے۔ فنکشن ریٹرن ، جوڑا۔ اگر اندراج کامیاب رہا تو ، bool سچ کے لیے 1 ہوگا ، ورنہ یہ غلط کے لیے 0 ہوگا۔ اگر اندراج کامیاب ہوتا ہے ، تو تکرار کرنے والے نئے داخل کردہ عنصر کی طرف اشارہ کرے گا۔ مندرجہ ذیل کوڈ استعمال کی وضاحت کرتا ہے:

unordered_map<const چار const چار*>امپ؛

امپ['کیلا'] = 'پیلا'؛
امپ['انگور'] = 'سبز'؛
امپ['انجیر'] = 'جامنی'؛

امپداخل کریں({{'چیری'، 'نیٹ'}، {'اسٹرابیری'، 'نیٹ'}})؛

لاگت<<امپسائز() << 'n'؛

آؤٹ پٹ ہے: 5. ایک سے زیادہ جوڑے ڈالے جا سکتے ہیں۔

size_type erase (const key_type & k)

یہ فنکشن unordered_map سے ایک جوڑے کو مٹا دیتا ہے۔ مندرجہ ذیل کوڈ طبقہ واضح کرتا ہے:

unordered_map<const چار const چار*>امپ؛

امپ['کیلا'] = 'پیلا'؛
امپ['انگور'] = 'سبز'؛
امپ['انجیر'] = 'جامنی'؛

intایک پر=امپمٹانا('انگور')؛

لاگت<<امپسائز() << 'n'؛

آؤٹ پٹ 2 ہے۔
باطل تبادلہ (unordered_map &)
دو غیر منظم نقشوں کو تبدیل کیا جا سکتا ہے ، جیسا کہ اس کوڈ کے حصے میں واضح کیا گیا ہے:

unordered_map<const چار const چار*>umap1= {{'کیلا'، 'پیلا'}،
{'انگور'، 'سبز'}، {'انجیر'، 'جامنی'}، {'اسٹرابیری'، 'نیٹ'}}؛

unordered_map<const چار const چار*>umap2= {{'چیری'، 'نیٹ'}، {'لیموں'، 'سبز'}}؛

umap1.تبادلہ(umap2)؛

unordered_map<const چار const چار*> ::تکرار کرنے والاiter1=umap1.شروع کریں()؛
جوڑا<const چار const چار*>پی آر 1= *iter1؛
unordered_map<const چار const چار*> ::تکرار کرنے والاiter2=umap2.شروع کریں()؛
جوڑا<const چار const چار*>پی آر 2= *iter2؛

لاگت<< 'umap1 کی پہلی کلید اور سائز:'<<پی آر 1پہلا <<'،'<<umap1.سائز() << 'n'؛
لاگت<< 'umap2 کی پہلی کلید اور سائز'<<پی آر 2پہلا <<'،'<<umap2.سائز() << 'n'؛
unordered_map<const چار const چار*>umap1= {{'کیلا'، 'پیلا'}،
{'انگور'، 'سبز'}، {'انجیر'، 'جامنی'}، {'اسٹرابیری'، 'نیٹ'}}؛
unordered_map<const چار const چار*>umap2= {{'چیری'، 'نیٹ'}، {'لیموں'، 'سبز'}}؛

umap1.تبادلہ(umap2)؛

unordered_map<const چار const چار*> ::تکرار کرنے والاiter1=umap1.شروع کریں()؛
جوڑا<const چار const چار*>پی آر 1= *iter1؛
unordered_map<const چار const چار*> ::تکرار کرنے والاiter2=umap2.شروع کریں()؛
جوڑا<const چار const چار*>پی آر 2= *iter2؛

لاگت<< 'umap1 کی پہلی کلید اور سائز:'<<پی آر 1پہلا <<'،'<<umap1.سائز() << 'n'؛
لاگت<< 'umap2 کی پہلی کلید اور سائز'<<پی آر 2پہلا <<'،'<<umap2.سائز() << 'n'؛

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

umap1 کی پہلی کلید اور سائز: چونا ، 2۔

umap2 اسٹرابیری کی پہلی کلید اور سائز ، 4۔

نقشہ غیر آرڈر ہے۔ نوٹ کریں کہ اگر ضرورت ہو تو نقشے کی لمبائی بڑھا دی جاتی ہے۔ ڈیٹا کی اقسام ایک جیسی ہونی چاہئیں۔

کلاس اور اس کی فوری اشیاء

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

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

کلاس دی کلاس۔
{
عوام:
intایک پر؛
جامد چارچودھری؛

باطلفنکشن(چارنہیں، const چار *p)
{
لاگت<< 'وہاں ہے ' <<ایک پر<< کتابوں کی قیمت <<نہیں<<p<< 'اسٹور میں۔' << 'n'؛
}
جامد باطلمزہ(چارچودھری)
{
اگر (چودھری== 'سے')
لاگت<< 'سرکاری جامد رکن کی تقریب' << 'n'؛
}
}؛

intمرکزی()
{
TheCla obj1۔؛TheCla obj2۔؛TheCla obj3۔؛TheCla obj4۔؛TheCla obj5۔؛

unordered_map<const چارTheCla>امپ؛
امپ= {{'کیلا'،obj1}، {'انگور'،obj2}، {'انجیر'،obj3}، {'اسٹرابیری'،obj4}، {'لیموں'،obj5}}؛

لاگت<<امپسائز() << 'n'؛

واپسی ؛
}

آؤٹ پٹ ہے: 5۔

کلاس کی تعریف میں دو ڈیٹا پبلک ممبر اور دو پبلک ممبر افعال ہیں۔ مین () فنکشن میں ، کلاس کے لئے مختلف اشیاء فوری طور پر ہوتی ہیں۔ اس کے بعد ایک غیر منظم نقشہ فوری طور پر بنایا جاتا ہے ، جہاں ہر جوڑا کلاس کے ایک پھل اور کسی شے کے نام پر مشتمل ہوتا ہے۔ نقشے کا سائز ظاہر ہوتا ہے۔ پروگرام کوئی انتباہ یا غلطی کے پیغام کے ساتھ مرتب کرتا ہے۔

نقشے کا اطلاق۔

صف ایک انڈیکس کو ویلیو سے جوڑتی ہے۔ کلیدی/قدر جوڑے زندگی کے بہت سے حالات میں موجود ہیں ، جن کو پروگرام کیا جا سکتا ہے۔ پھل/رنگ کی کلیدی/قدر جوڑی صرف ایک مثال ہے۔ ایک اور مثال لوگوں اور ان کی عمروں کا نام ہے۔ اس صورت میں ، جوڑا ایک قسم کا ہوگا ، جوڑا۔ یہ جوڑا بھی ہو سکتا ہے۔ مؤخر الذکر صورت میں ، پری پروسیسنگ ہدایت کو استعمال کیا جائے گا۔ ایک کلیدی/قدر جوڑی اب بھی شادی شدہ جوڑوں کے نام ہو سکتی ہے۔ جن ممالک میں کثرت ازدواج ہے وہاں ایک مرد کے لیے مختلف بیویاں ہوں گی۔

نقشے کی تشکیل

ایک نقشہ دو جہتی صف نہیں ہے ، جس میں دو کالم ہیں۔ ایک نقشہ ہیش فنکشن کے ساتھ کام کرتا ہے۔ کلید کو ہیش فنکشن کے ذریعے ، ایک صف کے عدد میں انکوڈ کیا جاتا ہے۔ یہ صف ہے جو اقدار کو برقرار رکھتی ہے۔ لہذا ، اصل میں اقدار کے ساتھ ایک صف ہے ، اور چابیاں صف کے اشاریوں پر نقش کی جاتی ہیں ، اور اسی طرح چابیاں اور اقدار کے مابین خط و کتابت کی جاتی ہے۔ ہیشنگ ایک وسیع موضوع ہے اور اس مضمون میں شامل نہیں ہے۔

نتیجہ

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

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

نقشے کے لیے ابتدائی_ فہرست لیٹرلز کی ایک صف ہے۔ ہر اندرونی لفظی دو اشیاء پر مشتمل ہوتا ہے ، کلید/قدر جوڑی۔

unordered_map کے ممبر افعال اور آپریٹرز کو درج ذیل عنوانات کے تحت درجہ بندی کیا جا سکتا ہے: unordered_map construction/copy construction ، unordered_map Capacity ، unordered_map iterator ، unordered_map آپریشنز ، اور unordered_map modifiers۔

ایک غیر منظم نقشہ استعمال کیا جاتا ہے جب کسی کلید کو کسی قدر کے ساتھ نقشہ بنانا ہو۔

کریس