我擁有較高級語言的編程經驗,並且幾星期前已經開始使用純C語言編寫代碼(出於學術原因)。我想實現一個類似於map<char,myStruct*>
的數據結構。純C實現從單個字符到指針的映射
如果這還不夠清楚:我想爲每個可能的SINGLE char
映射一個指向我定義的結構的指針。如果有辦法確保沒有2 char
可以指向相同的struct
(在將新元素插入到地圖上時不檢查其他每個char
),但這並不是絕對必要的。我還需要能夠從地圖中刪除配對,並用相同的密鑰但不同的指針重新插入配對。我認爲這通過,並認爲我可以創建一個指針數組所有可能的字符的長度,並存儲相應的指針使用char作爲數組索引(因爲它只是一個數字常量)。這可能工作得很好,但如果我最終只在我的應用程序中使用幾個字符,那麼爲地址分配這麼多空間似乎是低效的。
儘管如此,我還是沒有想到任何其他的解決方案(考慮到我是一個C新手,並不令人驚訝)。如果有任何含糊不清的建議,我將很感激您的正確方向。
我建議你看看Glib庫 - 它包括哈希和各種各樣的東西。你可以從他們那裏「偷走」一些想法。 如果你想要「模板」,它會變得很難看,如果你想爲你的嚴格類型實現一個地圖,這並不難。純C「模板」或「泛型」背後的一般想法是告訴你的容器結構的「sizeof」並使用它。然後使用#defined'd宏在訪問特定類型時將其轉換爲特定類型。然後將實際的結構存儲器存儲爲char數組。 – Matej
其基本思想是使用對結構進行操作的函數。結構將需要知道它所表示的映射的某些內容:鍵的大小,存儲數據的大小,指向散列函數的指針(如果您希望它可配置)等等。我記得看到一些與斯坦福大學有關的YouTube視頻,並會看看我能否找到它們。 – Corbin
你想要什麼被稱爲哈希表。我的猜測是你的密鑰是一個字符串,所以這將是一個char *,而不是char(可以通過一個普通的'void * array [256];'來實現)。 – wildplasser