BSEARCH

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home 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 safety MT-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/ に書かれている。

関連キーワード

months   メンバー   ポインター   struct   一致   sizeof   bsearch   compmi   argv   ソート   stdlib   size   整数   argc   printf   month   binary   最初   昇順   ルーチン   複数   用語   allbox   インターフェース   属性

Linux マニュアル 一覧

関連するコマンド・関数

lfind.3   lsearch.3   gpasswd.1   dsp56k.4   getpgid.2   getpgrp.2
 

Index

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

This document was created by man2html, using the manual pages.
Time: 04:39:14 GMT, October 11, 2026