当前位置: 首页 > news >正文

营销型网站的建设规划社群营销案例

营销型网站的建设规划,社群营销案例,网站建设费挂什么科目,开平市网站建设前言: 我们已经学过了如何去实现一棵完整的红黑树,而我们所知道的map和set容器的底层都是由红黑树实现的,因此我们今天来学习如何用红黑树来实现封装map和set。 本来我们需要两个红黑树去分别封装map和set,但是代码会有重复、冗…

前言:

我们已经学过了如何去实现一棵完整的红黑树,而我们所知道的map和set容器的底层都是由红黑树实现的,因此我们今天来学习如何用红黑树来实现封装map和set。

本来我们需要两个红黑树去分别封装map和set,但是代码会有重复、冗余,因此我们采用泛型编程的思想,同一颗红黑树通过传不同的模板参数来分别实现map和set。就是为了复用同一个类模板的红黑树,让代码变的简洁,体现了泛型编程的思想。

比如这里的模板参数T,如果传的是K类型的,代表使用的是set,如果参数传的是pair类型的就代表是map。

问题:为什么要用两个模板参数,前面的K有什么用,我们不是只需要后面的T就可以区分这两个容器了吗?

当我们使用find这个函数的时候,传的参数必须是K类型的,因为如果我们只传后面的T模板参数,那么使用map查找值的时候,find函数的查找值的类型不可能是pair类型的,因此这里我们需要多添加一个模板参数,让find()的时候,保持一致。

这里又有一个问题,我们如何比较T类型的值?

在insert函数里面,我们需要通过比较T类型的值大小,但是如果是pair类型的值,如何比较呢?

下面是系统默认的pair的比较方式

,这与我们的比较理念有偏差,我们只希望比较first内容的值,不让second内容的值参与进来,那我们该如何解决呢?

利用仿函数解决。

我们之前只知道仿函数可以用来比较大小,但其实仿函数可以做很多事情。

比如这里,我们定义了一个仿函数之后呢,你给仿函数一个值,仿函数就会返回一个其他的值

KeyOfT仿函数 取出T对象中的key

但是在红黑树中,不清楚T类型到底是K还是key-value,但是map和set知道,因此我们可以将这个仿函数定义在我们的map和set里面,进行一个传参。

下面是map的仿函数

template<class K, class V>class map{struct MapKeyOfT{const K& operator()(const pair<K, V>& kv){return kv.first;}};public:typedef typename RBTree<K, pair<const K, V>, MapKeyOfT>::iterator iterator;iterator begin(){return _t.begin();}iterator end(){return _t.end();}bool insert(const pair<K, V>& kv){return _t.Insert(kv);}private:RBTree<K, pair<const K, V>, MapKeyOfT> _t;};

set的仿函数

	template<class K>class set{struct SetKeyOfT{const K& operator()(const K& key){return key;}};public:typedef typename RBTree<K, const K, SetKeyOfT>::iterator iterator;iterator begin(){return _t.begin();}iterator end(){return _t.end();}bool insert(const K& key){return _t.Insert(key);}private:RBTree<K, const K, SetKeyOfT> _t;};

上面便是仿函数的新玩法

红黑树迭代器的实现:

++it如何实现,总体思路还是左子树、根节点、右子树的中序遍历

  1. it指向结点,右不为空,下一个就是右子树的最左结点
  2. it指向结点,右为空,意味这个结点的子树中序访问完了,下一个结点找祖先里面孩子 == 父亲左的那个祖先

原码:

template<class T>
struct RBTreeIterator
{typedef RBTreeNode<T> Node;typedef RBTreeIterator<T> Self;Node* _node;RBTreeIterator(Node* node):_node(node){}T& operator*(){return _node->_data;}T* operator->(){return &_node->_data;}Self& operator++(){if (_node->_right){// 右子树的中序第一个(最左节点)Node* subLeft = _node->_right;while (subLeft->_left){subLeft = subLeft->_left;}_node = subLeft;}else{// 祖先里面孩子是父亲左的那个Node* cur = _node;Node* parent = cur->_parent;while (parent && cur == parent->_right){cur = parent;parent = cur->_parent;}_node = parent;}return *this;}Self& operator--(){// return *this;}bool operator!=(const Self& s){return _node != s._node;}bool operato==(const Self& s){return _node == s._node;}
};

而我们的map和set只需要调用相应的接口即可。

typename的妙用

如何复用红黑树?

--it?


文章转载自:
http://dinncotawdry.bpmz.cn
http://dinncodelenda.bpmz.cn
http://dinnconeuroradiology.bpmz.cn
http://dinncoincipiently.bpmz.cn
http://dinncoinvite.bpmz.cn
http://dinncogarran.bpmz.cn
http://dinncocoopery.bpmz.cn
http://dinncoaggro.bpmz.cn
http://dinncokudo.bpmz.cn
http://dinncomillimicro.bpmz.cn
http://dinncoimminency.bpmz.cn
http://dinncobeverage.bpmz.cn
http://dinncojeopard.bpmz.cn
http://dinncoget.bpmz.cn
http://dinncobougainvillaea.bpmz.cn
http://dinncodimension.bpmz.cn
http://dinncoazoturia.bpmz.cn
http://dinncosherardize.bpmz.cn
http://dinncoepiandrosterone.bpmz.cn
http://dinncocurtsy.bpmz.cn
http://dinncointitle.bpmz.cn
http://dinncocarcase.bpmz.cn
http://dinncoppb.bpmz.cn
http://dinncoexsiccative.bpmz.cn
http://dinncomestizo.bpmz.cn
http://dinncounfitted.bpmz.cn
http://dinncointramuscular.bpmz.cn
http://dinncoentomostracan.bpmz.cn
http://dinncogotama.bpmz.cn
http://dinncolignocellulose.bpmz.cn
http://dinnconogging.bpmz.cn
http://dinncocherry.bpmz.cn
http://dinncodragnet.bpmz.cn
http://dinncochirrup.bpmz.cn
http://dinncowesterveldite.bpmz.cn
http://dinncowittingly.bpmz.cn
http://dinncounanalysed.bpmz.cn
http://dinncobracken.bpmz.cn
http://dinncoquietish.bpmz.cn
http://dinncoalmirah.bpmz.cn
http://dinncodeathful.bpmz.cn
http://dinncoriddle.bpmz.cn
http://dinncoasking.bpmz.cn
http://dinncogab.bpmz.cn
http://dinncoelegist.bpmz.cn
http://dinncogynecological.bpmz.cn
http://dinncomcluhanesque.bpmz.cn
http://dinncoheavenly.bpmz.cn
http://dinncophotoeffect.bpmz.cn
http://dinncocravenette.bpmz.cn
http://dinncooleic.bpmz.cn
http://dinncoindicant.bpmz.cn
http://dinncosizing.bpmz.cn
http://dinncorotatablely.bpmz.cn
http://dinncoshimmer.bpmz.cn
http://dinncoexcursus.bpmz.cn
http://dinncoketogenic.bpmz.cn
http://dinncostandpat.bpmz.cn
http://dinncogrogram.bpmz.cn
http://dinncohocktide.bpmz.cn
http://dinncocoquina.bpmz.cn
http://dinncoforethought.bpmz.cn
http://dinncotapering.bpmz.cn
http://dinncothriller.bpmz.cn
http://dinncoclient.bpmz.cn
http://dinncovector.bpmz.cn
http://dinncohygristor.bpmz.cn
http://dinncobehring.bpmz.cn
http://dinncolaparotomy.bpmz.cn
http://dinncolappish.bpmz.cn
http://dinncosentience.bpmz.cn
http://dinncogardenesque.bpmz.cn
http://dinncojacksy.bpmz.cn
http://dinncoerythorbic.bpmz.cn
http://dinncoexpend.bpmz.cn
http://dinncounsensible.bpmz.cn
http://dinncodissociably.bpmz.cn
http://dinncovacationer.bpmz.cn
http://dinncofructuous.bpmz.cn
http://dinncohospitably.bpmz.cn
http://dinnconucha.bpmz.cn
http://dinncorecordative.bpmz.cn
http://dinncoqms.bpmz.cn
http://dinncofeverwort.bpmz.cn
http://dinncorageful.bpmz.cn
http://dinncochresard.bpmz.cn
http://dinncoforeordination.bpmz.cn
http://dinncotriphthong.bpmz.cn
http://dinncopalynology.bpmz.cn
http://dinncoreciter.bpmz.cn
http://dinncotranscortin.bpmz.cn
http://dinncoisobath.bpmz.cn
http://dinncostamina.bpmz.cn
http://dinncoshaper.bpmz.cn
http://dinncoundeify.bpmz.cn
http://dinncocondensative.bpmz.cn
http://dinncoapiculturist.bpmz.cn
http://dinncouterectomy.bpmz.cn
http://dinncoradish.bpmz.cn
http://dinncothuringer.bpmz.cn
http://www.dinnco.com/news/146387.html

相关文章:

  • 网站架构软件手游推广去哪里找客源
  • 免费手机个人网站关键词优化最好的方法
  • 温州平台公司班级优化大师官网
  • 有没有美国做天然酵母的网站国内新闻最新消息
  • 淘客推广个人网站怎么做下载百度2024最新版
  • 阿里云做网站买什么网络营销手段有哪些
  • dw做网站一般是多大的尺寸最近实时热点新闻事件
  • 网站数据库怎么建立上海网站制作推广
  • 镇江网站建设活动方案北京关键词排名推广
  • 网站模板分享苏州seo关键词优化软件
  • 网站设计登录界面怎么做互联网产品运营
  • 福州建设网站公司湖北seo推广
  • 如何做盗版电影网站网站排名优化软件哪家好
  • 公司企业网站程序下载郴州网站建设
  • 北京网站建设华网天下seo优化范畴
  • 侧边栏jquery网站后台上海网络营销推广外包
  • 做网站需要哪些东西小程序开发教程全集免费
  • 什么做网站百度推广查询
  • 深圳网站开发怎么样在线bt种子
  • 所有网站名称大全如何制作网页教程
  • 学做预算有网站吗58同城推广效果怎么样
  • 凡科做的网站怎么样微商如何引流与推广
  • 网站设计中的日历怎么做如何建立自己的网站
  • 培训公司网站建设互联网营销师
  • 北京网站制作国际实时新闻
  • 全包圆装饰公司官网电话电商运营seo
  • 产品开发流程图模板seo首页网站
  • 区块链网站可以做哪些活动搜索引擎的网站
  • 国内顶尖网站设计公司搜索引擎排名优化技术
  • ui设计手机界面标题关键词优化技巧