Первое что приходит в голову - это использовать GHashTable из GLib. Ну там, автоматические биндинги подо всё (Python, C#, Java) через GObject Introspection, наличие документации.
И вот смотрю я на него внимательно: https://docs.gtk.org/glib/type_func.HashTable.get_keys.html
а там написано: «This function is not directly available to language bindings.»
И так почти во всех функциях этого «класса».
Или, в функции Add написано: https://docs.gtk.org/glib/type_func.HashTable.add.html «When a hash table only ever contains keys that have themselves as the corresponding value it is able to be stored more efficiently. See the discussion in the section description.» но в этой документации нет вкладки «дискуссии» в секции «description»…
Я понимаю, что нормальные люди этим не пользуются. Но как вообще они тогда программируют? Работа с множествами это базовая база. А писать надо обязательно на Си, так как это единственный язык с хорошо проработанными FFI (https://en.wikipedia.org/wiki/Foreign_function_interface), это потребуется, когда нужно будет построенную объектную модель скриптовать из под всего.