2013-11-04 73 views
1

我需要使用GMPs mpf_t/mpz_t作爲散列表中的鍵。 是否有任何有效的方式來訪問數字表示的原始字節,所以我可以在他們上運行一個哈希函數?使用GMP類型(mpf_t/mpz_t)作爲散列表中的鍵

我已經閱讀了文檔,但我現在並不覺得更聰明。 ;)

謝謝! Regards, Ethon

+1

這樣做目前尚不支持。有計劃可能會添加一個記錄的API來訪問未來版本中的原始表示。同時,閱讀源代碼可以提供幫助(有評論!)。 –

回答

1

出於好奇,爲什麼使用哈希時,你可以按值排序?比較非常快,因爲它比較了從MSB到LSB的字節/分支,只要它們不同,就會返回結果。

您可以使用平臺相關的mp_limb_t類型訪問原始數據。 mpz_tmpf_t都有一個mp_limb_t矢量存儲在_mp_d指定的地址,其中有效肢體的數量由_mp_size字段的絕對值給出。 (定義在gmp.h

當然,如果散列函數依賴於一個8位字節向量,您將需要轉換肢體向量。幸運的是,在任何理智的平臺上,總是可以被8整除。

+0

通常只有'GMP_NUMB_BITS'位與每個肢體有關,並且可能很容易有許多釘子不是8的倍數。但是,這些天釘子沒有使用,所以當前沒有關係。 –