|
||||||||||||
|
|
HSEARCHSection: Linux Programmer's Manual (3)Updated: September 30, 1995 Index Return to Main Contents ̾Á°hcreate, hdestroy, hsearch - ¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Î´ÉÍý½ñ¼°#include <search.h> ENTRY *hsearch(ENTRY item, ACTION action); int hcreate(unsigned nel); void hdestroy(void); ÀâÌÀ¤³¤ì¤é£³¤Ä¤Î´Ø¿ô¤òÍøÍѤ¹¤ë¤È¡¢¥æ¡¼¥¶¤Ï¥¡¼¤ÈǤ°Õ¤Î¥Ç¡¼¥¿¤ò´ØÏ¢¤Å¤±¤ë¥Ï¥Ã ¥·¥å¥Æ¡¼¥Ö¥ë¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ºÇ½é¤Ë¡¢´Ø¿ô hcreate() ¤Ë¤è¤Ã¤Æ¥Æ¡¼¥Ö¥ë¤òºîÀ®¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ nel ¤Ï¡¢¥Æ¡¼¥Ö¥ë¤Î¥¨¥ó¥È¥ê¡¼¿ô¤ÎͽÁÛ¤µ¤ì¤ëÃͤǤ¢¤ë¡£ hcreate() ¤Ï¡¢ºîÀ®¤µ¤ì¤ë¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ÎÀǽ¤ò¸þ¾å¤µ¤»¤ë¤¿¤á¤Ë ¤³¤ÎÃͤòÁý¤ä¤¹¾ì¹ç¤â¤¢¤ë¡£GNU¤Î¼ÂÁõ¤Ç¤Ï¡¢ ¥Æ¡¼¥Ö¥ë¤¬¤Û¤È¤ó¤É°ìÇդˤʤà ¤¿¾ì¹ç¡¢hsearch() ¤Ë¤è¤Ã¤Æ¤â¥Æ¡¼¥Ö¥ë¤¬³ÈÄ¥¤µ¤ì¤ë¡£¥Æ¡¼¥Ö¥ë¤Î¤¿¤á ¤ÎÎΰè¤ò³ä¤êÅö¤Æ¤ë¤¿¤á¤Ë ,BR malloc (3) ¤¬ÍѤ¤¤é¤ì¤ë¡£ ¤³¤ì¤ËÂбþ¤¹¤ë hdestroy() ´Ø¿ô¤Ï¡¢¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Ë¤è¤Ã¤ÆÀêͤµ ¤ì¤Æ¤¤¤¿¥á¥â¥ê¤ò³«Êü¤·¡¢¿·¤·¤¤¥Æ¡¼¥Ö¥ë¤òºîÀ®¤Ç¤¤ë¤è¤¦¤Ë¤¹¤ë¡£ item ¤Ï ENTRY ·¿¤Ç¤¢¤ê¡¢¤³¤ì¤Ï <search.h> ¤ÎÃæ¤Ç typedef¤µ¤ì¤Æ¤ª¤ê¡¢¼¡¤ÎÍ×ÁǤò´Þ¤ó¤Ç¤¤¤ë:
typedef struct entry
{
char *key;
char *data;
} ENTRY;
key ¤Ï¡¢¥µ¡¼¥Á¥¡¼¤È¤Ê¤ë0¤Ç½ªÃ¼¤µ¤ì¤¿ASCIIʸ»úÎó¤ò»Ø¤¹¡£ data ¤Ï¡¢¤³¤Î¥¡¼¤ËÂбþ¤¹¤ë¥Ç¡¼¥¿¤ò»Ø¤¹¡£(ʸ»ú·¿(char)°Ê³°¤Î·¿¤Ø ¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢Ê¸»ú·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ë¥¥ã¥¹¥È¤¹¤Ù¤¤Ç¤¢¤ë) hsearch() ¤Ï¡¢item ¤ÈƱ¤¸¥¡¼¤ò»ý¤Ä¹àÌܤò¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë ¤ÎÃæ¤«¤éõ¤·¡¢À®¸ù¤¹¤ì¤Ð¤½¤Î¹àÌܤؤΥݥ¤¥ó¥¿¤òÊÖ¤¹¡£Ãµº÷¤¬¼ºÇÔ¤·¤¿¾ì¹ç¡¢ action ¤Ë¤è¤Ã¤Æ hsearch() ¤Îưºî¤¬·è¤Þ¤ë¡£ÃÍ ENTER ¤Ï¿·¤·¤¤¹àÌܤòÁÞÆþ¤·¡¢ÃÍ FIND ¤Ï NULL ¤òÊÖ¤¹¤³¤È¤ò°ÕÌ£¤¹¤ë¡£ ÊÖ¤êÃÍhcreate() ¤Ï¡¢¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤¬¤¦¤Þ¤¯ºîÀ®¤Ç¤¤Ê¤¤¾ì¹ç NULL ¤òÊÖ¤¹¡£hsearch() ¤Ï¡¢action ¤¬ ENTER ¤Ç¤·¤«¤â¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö ¥ë¤ò³ÈÄ¥¤¹¤ë¤Î¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¡¢¤Þ¤¿¤Ï action ¤¬ FIND ¤Ç¤·¤«¤â item ¤¬¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ëÆâ¤Ë¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç NULL ¤òÊÖ¤¹¡£ ½àµò
¥Ð¥°¤³¤Î¥¤¥ó¥×¥ê¥á¥ó¥Æ¡¼¥·¥ç¥ó¤Ç¤Ï¡¢°ì»þ¤Ë°ì¤Ä¤Î¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤·¤«´ÉÍý¤Ç ¤¤Ê¤¤¡£ ¸Ä¡¹¤Î¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¥¨¥ó¥È¥ê¡¼¤òÄɲäǤ¤ë¤¬¡¢ºï½ü¤Ç¤¤Ê¤¤¡£Î㼡¤Î¥×¥í¥°¥é¥à¤Ï¡¢¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤Ë24¸Ä¤Î¹àÌܤòÁÞÆþ¤·¡¢¤½¤ì¤«¤é¤½¤Î¤¦ ¤Á¤Î¤¤¤¯¤Ä¤«¤òɽ¼¨¤¹¤ë¡£
#include <stdio.h>
#include <search.h>
char *data[]={ "alpha", "bravo", "charlie", "delta",
"echo", "foxtrot", "golf", "hotel", "india", "juliet",
"kilo", "lima", "mike", "november", "oscar", "papa",
"quebec", "romeo", "sierra", "tango", "uniform",
"victor", "whisky", "x-ray", "yankee", "zulu"
};
int main()
{
ENTRY e, *ep;
int i;
/* start with small table, and let it grow */
hcreate(3);
for (i = 0; i < 24; i++)
{
e.key = data[i];
/* data is just an integer, instead of a pointer
to something */
e.data = (char *)i;
ep = hsearch(e, ENTER);
/* there should be no failures */
if(ep == NULL) {fprintf(stderr, "entry failed\n"); exit(1);}
}
for (i = 22; i < 26; i++)
/* print two entries from the table, and show that
two are not in the table */
{
e.key = data[i];
ep = hsearch(e, FIND);
printf("%9.9s -> %9.9s:%d\n", e.key, ep?ep->key:"NULL",
ep?(int)(ep->data):0);
}
return 0;
}
´ØÏ¢¹àÌÜbsearch(3), lsearch(3), tsearch(3), malloc(3)
Index |
|||||||||||
|
||||||||||||