انتخاب بهترین دیکشنری در C++. قسمت 2: ظروف نامرتب

این دومین قسمت از مجموعه در مورد انتخاب مناسب ترین کانتینر انجمنی (دیکشنری) در C++23 است. در قسمت اول، ظروف سفارش داده شده را پوشش دادیم و در این قسمت، ظروف نامرتب را به تفصیل مورد بحث قرار خواهیم داد.

ظروف بدون سفارش

این کانتینرها هیچ ترتیب تعریف شده ای برای کلیدهای خود ارائه نمی دهند. علاوه بر این، ترتیب کلیدها می تواند با هر تغییر تغییر کند، بنابراین برنامه هرگز نباید به آن تکیه کند. چنین کانتینرهایی همیشه به عنوان نقشه هش پیاده سازی می شوند.

به طور کلی، هنگام افزودن، حذف یا جستجوی یک کلید، یک نقشه هش ابتدا مقداری از مقدار هش یکپارچه آن کلید را با استفاده از تابع هش محاسبه می کند. سپس هش (یا بهتر بگوییم قسمت آن) به عنوان شاخصی در آرایه از پیش تخصیص داده شده به هم پیوسته استفاده می شود. هر ورودی در این آرایه a نامیده می شود سطل. برخی از ورودی‌ها در آن آرایه خالی خواهند بود، برخی حاوی یک عنصر واحد هستند و برخی ممکن است به دلیل برخورد هش به بیش از یک عنصر نگاشت شوند. این زمانی اتفاق می افتد که کلیدهای مختلف دارای مقادیر هش هستند که به یک شاخص آرایه اشاره می کنند. نقشه های هش از استراتژی های مختلفی برای مقابله با برخورد هش استفاده می کنند (به این مقاله ویکی پدیا مراجعه کنید). تعداد عناصر در نقشه هش تقسیم بر اندازه کل آرایه را می نامند ضریب بار. هر چه ضریب بار بیشتر باشد، احتمال برخورد هش با هر عنصر تازه وارد شده بیشتر می شود.

برعکس…

Source link