Помогите в реализации контейнера MultiMap на Си (не Си++) (unsigned, unsigned), на двоичных деревьях или по другому. чтобы работал быстро и с понятным исходным кодом. реализовал на обычных двоичных деревьях но работает медленно. особено если на нем ведется учет выделленной памяти через обертку xmalloc. Т.к. malloc выделяет адресса последовательно а это наихудщий вариант для обычных двоичных деревьев. Нужны map_insert(), map_delete(), и желательно map_balance() Дополнение #1 10.10.2010 20:50:15 смотрел реализацию в glib, мне он показалась оч. страшной, и как я понял в структуре узла двоичного дерева нет ссылки на родителя -> я не понимаю как можно обойти все элементы дерева без этого. например struct btree * elem = bt_first( root_elem ); while( elem ) { printf( «%u %u\n», elem -> key, elem -> value ); elem = bt_next( elem ); } - возможно только если есть родитель у узла
есть реализация в исходниках ядра линукс lib/rb_tree.c но там нет delete ? ( красно-черное дерево с указателем на родителя, признак R/B упакован в указателе на родителя )