游戏排名map的实现

实现一个map模版,能够实现以下的功能:

1.能在o(lgn)时间内,实现按key 值的添加,删除,查找。

2.能在o(lgn)时间内,实现按value 值排名的增删查

 

代码如下:

 

#include<iostream>

#include<string>

 

using namespace std;

 

//∂®“Â∫Ï∫⁄÷µ

const  int  RED  =1;

const  int  BLACK =0;

 

template<typename K,typename V>

struct  K_Value

{

K_Value():first(K()),second(V()){}

K_Value(const K &k,const V &v):first(k),second(v){}

K  first;               //÷∏œÚπÿº¸◊÷

V  second;             //÷∏œÚ÷µ

};

 

 

//∂®“ ˜Ω⁄µ„

template<typename T,typename V>

struct RBNode{

RBNode():left(NULL),right(NULL),parent(NULL),key(T()),value(V()),color(RED),l_child_nums(0),r_child_nums(0){}

RBNode(const T &v1,const V& v2):left(NULL),right(NULL),parent(NULL),key(v1),value(v2),color(RED),l_child_nums(0),r_child_nums(0){}

T  key;

V  value;

RBNode * left;

RBNode * right;

int color;

RBNode * parent;      

int   l_child_nums;                 //±»µ±«∞Ω⁄µ„–°µƒ∫¢◊”∏ˆ ˝

int   r_child_nums;                 //±»µ±«∞Ω⁄µ„¥Ûµƒ∫¢◊”Ω⁄µ„∏ˆ ˝

};

 

//∂®“ƒ£∞Â

template  <typename T,typename V> class Find_Map{

public:

  Find_Map()

  {

      Nil = new RBNode<T,V>;

  Nil->parent = Nil;

  Nil->color = BLACK;

  //Nil->key = NULL;

  Nil->l_child_nums = 0;

  Nil->r_child_nums = 0;

  Nil->left = Nil;

  Nil->right = Nil;

  root = Nil;

  }

  //Œˆππ∫Ø ˝

       ~Find_Map()

  {

      delete Nil;

  Nil = NULL;

  root = NULL;

  }

  void   RB_Create( K_Value<T,V> a[],int length );   //¥¥Ω®∫Ï∫⁄ ˜

  void   Delete(const T &key);            //∞¥÷µ…æ≥˝

  void   Insert(const K_Value<T,V> &key);            //∞¥÷µÃ̺”        

  K_Value<T,V>  Search(const T &v1);      //∞¥key≤È’“

  K_Value<T,V>  RankSearch(int rank);            //∞¥≈≈√˚≤È’“

private:

RBNode<T,V> * TreeSuccessor(RBNode<T,V> * x);

void  InsertReBalance(RBNode<T,V> * node);    //≤»Î∫ÛΩ´ ˜≈™≥…∆Ω∫‚ ˜

 

void  DeleteReBalance(RBNode<T,V> * node);               //…æ≥˝∫ÛΩ´ ˜≈™≥…∆Ω∫‚ ˜

 

     void  _rotate_left(RBNode<T,V> * node);     //◊Û–˝≤Ÿ◊˜

void  _rotate_right(RBNode<T,V> * node);    //”“–˝≤Ÿ◊˜

 

RBNode<T,V> * root;

RBNode<T,V> * Nil;                                 //…Ë÷√…⁄±¯

};

 

//∞¥÷µ≤È’“

template<typename T,typename V>

K_Value<T,V>  Find_Map<T,V>:: Search(const T& value)

{

//∏˘æ›typeµƒ¿‡–Õæˆ∂® «‘ˆº”ªπ «…æ≥˝ªÚ’fl≤ª∂Ø

  RBNode<T,V> * p = root;

  while(p != Nil && p->key != value)

  {

        if(p->key == value)

{

    return K_Value<T,V>(p->key,p->value);

break;

}

//œÚ◊Û≤È’“

elseif(p->key < value)

{

p = p->right;

}

//œÚ”“≤È’“

else

{

p = p->left;

}

  }

  if(p->key == value)

  {

      return K_Value<T,V>(p->key,p->value);

  }

  return K_Value<T,V>();

}

 

// µœ÷∞¥≈≈√˚≤È’“

template<typename T,typename V>

K_Value<T,V> Find_Map<T,V>::RankSearch(int rank)

{

RBNode<T,V> *  p = root;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值