[問題] 關於 bsearch() 的 comparator

看板C_and_CPP (C/C++)作者 (奶油焗蛋餃...:))時間16年前 (2010/02/27 12:54), 編輯推噓4(405)
留言9則, 4人參與, 最新討論串1/1
使用過 C 的 bsearch() 的人,應該都知道它的原型長這樣: void * bsearch (const void * key, const void * base, size_t num, size_t size, int (* comparator) ( const void *, const void * ) ); 意義上還蠻簡單的: 在一個有 num 個元素,每個元素大小為 size 的陣列 base 中,尋找有 key 的元素 在這裡我想要問的問題是有關 comparator 這個東西: 不就是比較兩個 key 值相不相等而已,何必另外多一個 comparator 當作參數? 這實在是想不透啊~~~@@~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.77.58

02/27 13:00, , 1F
因為丟進去的資料型態是void*, 比較的時候必須要轉回
02/27 13:00, 1F

02/27 13:01, , 2F
正確的型態作處理, 而且必須提供三種回傳值, 這是你的
02/27 13:01, 2F

02/27 13:02, , 3F
函數必須做的事, 參考 : http://tinyurl.com/yloh5fq
02/27 13:02, 3F

02/27 13:33, , 4F
bsearch是binary search, 所以不只單純比較key相等而已.
02/27 13:33, 4F

02/27 13:33, , 5F
詳情請去看一下binary search的演算法@_@"
02/27 13:33, 5F

02/27 13:34, , 6F
另外, 它可以用來search任何自定的type, 你不給它
02/27 13:34, 6F

02/27 13:35, , 7F
compare function, 它也不知道怎麼幫你比較:)
02/27 13:35, 7F

02/28 15:02, , 8F
也許陣列是由大排到小。也許陣列的資料不是基本的變數型態。
02/28 15:02, 8F

03/01 00:13, , 9F
以上推文都可以當作參考
03/01 00:13, 9F
文章代碼(AID): #1BYAMSs0 (C_and_CPP)
文章代碼(AID): #1BYAMSs0 (C_and_CPP)