bsearch
| معرفة في ملف <stdlib.h>
|
||
void* bsearch( const void* key, const void* ptr, size_t count, size_t size, int (*comp)(const void*, const void*) ); |
||
تقوم بإيجاد عنصر مساوٍ للعنصر الذي يشير إليه key وذلك بالبحث داخل مصفوفة مرتبة مشار إليها بـ ptr. المصفوفة تحوي عدد count من العناصر وكل عنصر حجمه size بايت. يتم استعمال الدالة المشار إليها بـ comp لإجراء المقارنات.
يكون السلوك غير معرف ما لم تكن المصفوفة مرتبة تصاعديا وفقا لنفس المعيار المستعمل من قبل comp.
في حالة أن المصفوفة تحوي أكثر من عنصر تعتبرهم comp مساوي للعنصر الذي يتم البحث عنه, يكون غير معرفا أي تلك العناصر يتم إرجاعها.
محتويات
معطيات
| key | - | مؤشر على العنصر المرض البحث عنه |
| ptr | - | مؤشر على المصفوفة المرض البحث فيها |
| count | - | عدد العناصر في المصفوفة |
| size | - | حجم كل عنصر في المصفوفة بالبايت |
| comp | - | دالة مقارنة تقوم بإرجاع عدد صحيح سالب عندما يكون المعطى الأول أصغر من المعطى الثاني. عدد صحيح موجب عندما يكون المعطى الأول أكبر من المعطى الثاني وصفر إذا تساوى المعطيان.
لا يجوز للدالة أن تعدل من المعطيات |
القيمة المُرجعة
إن وجد العنصر يتم إرجاع مؤشر عليه في المصفوفة. يتم إرجاع NULL ما لم يكن العنصر موجودا.
مثال
#include <stdlib.h>
#include <stdio.h>
struct data {
int nr;
char const *value;
} dat[] = {
{1, "Foo"}, {2, "Bar"}, {3, "Hello"}, {4, "World"}
};
int data_cmp(void const *lhs, void const *rhs)
{
struct data const *const l = lhs;
struct data const *const r = rhs;
return (l->nr > r->nr) - (l->nr < r->nr);
}
int main(void)
{
struct data key = { .nr = 3 };
struct data const *res = bsearch(&key, dat, sizeof(dat)/sizeof(dat[0]),
sizeof(dat[0]), data_cmp);
if (!res) {
printf("No %d not found\n", key.nr);
} else {
printf("No %d: %s\n", res->nr, res->value);
}
}
الخرج:
No 3: Hello
أنظر أيضا
(C11) |
ترتب مجموعة من العناصر دون مبالاة للنوع (دالة) |
مقالة مرجع C++ عن bsearch
|