Man page - bsearch(3)

Packages contains this manual

Available languages:

en fr pt_BR es pl ko ja ru ro de

Manual

BSEARCH

名 前
書 式
説 明
返 り 値
属 性
準 拠

関 連 項 目
こ の 文 書 に つ い て

名 前

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) を 参 照 。

Image grohtml-22938-1.png

準 拠

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/ に 書 か れ て い る 。