[C.C++] c 语言实现 map,C语言实现的HashMap

280 0
Honkers 2025-6-4 03:26:28 | 显示全部楼层 |阅读模式

#include "c_map.h"

void __c_map(c_pmap thiz, COMPARER keycmp)

{

c_prb_tree ptree = (c_prb_tree)__c_malloc(sizeof(c_rb_tree));

__c_rb_tree(ptree, keycmp);

ptree->_A_keyofvalue = c_select1st();

thiz->_l = ptree;

}

void __c_pam(c_pmap thiz)

{

__c_eert_br((c_prb_tree)thiz->_l);

__c_free(thiz->_l);

}

c_pmap c_map_assign(c_pmap thiz, const c_pmap M)

{

c_rb_tree_assign((c_prb_tree)thiz->_l, (c_prb_tree)M->_l);

return thiz;

}

c_iterator c_map_begin(c_pmap thiz)

{

return c_rb_tree_begin((c_prb_tree)thiz->_l);

}

c_iterator c_map_end(c_pmap thiz)

{

return c_rb_tree_end((c_prb_tree)thiz->_l);

}

c_reverse_iterator c_map_rbegin(c_pmap thiz)

{

return c_rb_tree_rbegin((c_prb_tree)thiz->_l);

}

c_reverse_iterator c_map_rend(c_pmap thiz)

{

return c_rb_tree_rend((c_prb_tree)thiz->_l);

}

c_bool c_map_empty(c_pmap thiz)

{

return c_rb_tree_empty((c_prb_tree)thiz->_l);

}

size_type c_map_size(c_pmap thiz)

{

return c_rb_tree_size((c_prb_tree)thiz->_l);

}

size_type c_map_max_size(c_pmap thiz)

{

return c_rb_tree_max_size((c_prb_tree)thiz->_l);

}

value_type c_map_at(c_pmap thiz, key_type key)

{

c_iterator iter = c_map_lower_bound(thiz, key);

c_iterator end = c_map_end(thiz);

if(ITER_EQUAL(iter, end) ||

((c_prb_tree)thiz->_l)->_A_key_compare(key,

((c_ppair)ITER_REF(iter))->first) < 0)

return NULL; return ((c_ppair)ITER_REF(iter))->second;

}

void c_map_swap(c_pmap thiz, c_pmap M)

{

c_rb_tree_swap((c_prb_tree)thiz->_l, (c_prb_tree)M->_l);

}

c_iter_bool_pair c_map_insert(c_pmap thiz, const value_type val)

{

return c_rb_tree_insert_unique((c_prb_tree)thiz->_l, val);

}

c_iterator c_map_insert1(c_pmap thiz, c_iterator position, const value_type val)

{

return c_rb_tree_insert_unique1((c_prb_tree)thiz->_l, position, val);

}

void c_map_insert2(c_pmap thiz, c_iterator first, c_iterator last)

{

c_rb_tree_insert_unique2((c_prb_tree)thiz->_l, first, last);

}

void c_map_erase(c_pmap thiz, c_iterator position)

{

c_rb_tree_erase((c_prb_tree)thiz->_l, position);

}

size_type c_map_erase1(c_pmap thiz, key_type key)

{

return c_rb_tree_erase1((c_prb_tree)thiz->_l, key);

}

void c_map_erase2(c_pmap thiz, c_iterator first, c_iterator last)

{

c_rb_tree_erase2((c_prb_tree)thiz->_l, first, last);

}

void c_map_clear(c_pmap thiz)

{

c_rb_tree_clear((c_prb_tree)thiz->_l);

}

c_iterator c_map_find(c_pmap thiz, key_type key)

{

return c_rb_tree_find((c_prb_tree)thiz->_l, key);

}

size_type c_map_count(c_pmap thiz, key_type key)

{

c_iterator key_iter = c_rb_tree_find((c_prb_tree)thiz->_l, key);

c_iterator end = c_rb_tree_end((c_prb_tree)thiz->_l);

return ITER_EQUAL(key_iter, end) ? 0 : 1;

}

c_iterator c_map_lower_bound(c_pmap thiz, key_type key)

{

return c_rb_tree_lower_bound((c_prb_tree)thiz->_l, key);

}

c_iterator c_map_upper_bound(c_pmap thiz, key_type key)

{

return c_rb_tree_upper_bound((c_prb_tree)thiz->_l, key);

}

c_iter_iter_pair c_map_equal_range(c_pmap thiz, key_type key)

{

return c_rb_tree_equal_range((c_prb_tree)thiz->_l, key);

}

c_bool c_map_less(c_pmap thiz, const c_pmap M, COMPARER paircmp)

{

return c_rb_tree_less((c_prb_tree)thiz->_l, (c_prb_tree)M->_l, paircmp);

}

c_bool c_map_equal(c_pmap thiz, const c_pmap M, COMPARER paircmp)

{

return c_rb_tree_equal((c_prb_tree)thiz->_l, (c_prb_tree)M->_l, paircmp);

}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4014
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行