BSEARCH

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page roff page
 

名前

bsearch - ソートされた配列を二分木検索 (binary search) する  

書式

#include <stdlib.h>

void *bsearch(const void *key, const void *base,
              size_t nmemb, size_t size,
              int (*compar)(const void *, const void *));
 

説明

bsearch() 関数は nmemb 個のオブジェクトからなる配列を検索 する。配列の最初のメンバーへのポインターは base によって与える。 ポインター key で参照されるオブジェクトと一致するメンバーが返される。 配列中の各々のメンバーのサイズは size によって指定する。

配列の内容は比較関数 compar に基づき、昇順にソートされていなけれ ばならない。 compar ルーチンは二つの引数を取る関数で、一つ 目に key へのポインター、次に配列のメンバーへのポインターを取る。 この順に指定したとき、 key が配列メンバーより小さいときには 負の整数を、大きいときには正の整数を、一致したときには 0 を、それぞれ compar は返さなければならない。  

返り値

bsearch() 関数は、配列のメンバーのうち、一致したものへのポインターを 返す。見つからなかったときは NULL を返す。 key と一致したメンバーが 複数あるとき、そのうちのどのメンバーが返されるかはわからない。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース属性
bsearch() Thread safetyMT-Safe

 

準拠

POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.  

以下の例は、 qsort(3) を使って構造体の配列の並び換えを行った後、 所望の要素を bsearch() を使って取得するものである。

#include <stdio.h> #include <stdlib.h> #include <string.h>

struct mi {
    int nr;
    char *name; } months[] = {
    { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
    { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
    { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" } };

#define nr_of_months (sizeof(months)/sizeof(months[0]))

static int compmi(const void *m1, const void *m2) {
    const struct mi *mi1 = m1;
    const struct mi *mi2 = m2;
    return strcmp(mi1->name, mi2->name); }

int main(int argc, char **argv) {
    qsort(months, nr_of_months, sizeof(months[0]), compmi);
    for (int i = 1; i < argc; i++) {
        struct mi key;
        struct mi *res;


        key.name = argv[i];
        res = bsearch(&key, months, nr_of_months,
                      sizeof(months[0]), compmi);
        if (res == NULL)
            printf("'%s': unknown month\n", argv[i]);
        else
            printf("%s: month #%d\n", res->name, res->nr);
    }
    exit(EXIT_SUCCESS); }  

関連項目

hsearch(3), lsearch(3), qsort(3), tsearch(3)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。


 

Index

名前
書式
説明
返り値
属性
準拠
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 16:46:40 GMT, November 24, 2023