第七十五讲 细说map(1)

这些天都比较忙,所以没时间更新新内容,不过说实在的,对于C++的内容我们已经没多少可以拿出来说的了,当然对于基础知识,我们早就说完了,有些朋友,没有看过一讲,就问,有没有不要基础的?我想可能大概是我们的章节名都取得太随意太简单太直观化了些,所以有些朋友认为我们的内容说得很基础,但是我想真正看过里面内容的朋友肯定不会这么认为,我们里面引入的都是些很有技巧性的技术,好了,废话不多说,我们今天继续来说新的东西——关联容器。

关于容器,我们说了序列容器,至于大家吸收了多少这就是看大家的了,如果还有不明白的,可以回去多看几遍,其实,STL里面的东西不难如果我们只想去使用的话,尤其是在我们知道他们的原型之后,用起来更是轻松加愉快,当然,如果我们真心要研究STL的算法的话,那可能就有点难度了,所以,我只给大家提供原型和一些简单的实现,想要深入研究STL里面的东西,等我们打算去研究算法的时候再来研究吧。我们现在要做的就是拿来使用。

map在关联容器里的重要性如同vector在序列容器的重要性一样,所以,在说关联容器的时候我们肯定先来说说map。

map第一次接触他的时候我就想怎么就出了个地图了呢?后来又听说他叫字典,我就纳闷,怎么地图就变成了字典了呢?这个笑话有些冷,不过当初真是这样的。好了,我们今天先来看看map吧。
——————————–
template<typename Key,typename T,typename Cmp=less<Key>,

typename A=allocator<pair<const Key,T
>>>
class map{
public:

//还是老规矩,每个容器在一开始都要有一系列的类型定义

typedef Key key_value;



typedef T mapped_type;



typedef pair<const Key,T>value_type;

//这点和我们以前所说的序列容器有所不同,这也就是他的重点。

typedef Cmp key_compare;



typedef A allocator_type;



typedef typename A::reference reference;



typedef typename A::const_reference const_reference;



typedef implementation_defined1 iterator;



typedef implementation_defined2 const_iterator;



typedef typename A::size_type size_type;



typedef typename A::difference_type difference_type;



typedef std::reverse_iterator<iterator>reverse_iterator;



typedef std::reverse_iterator<const_iterator>const_reverse_iterator;



//

//

};


———————————

好吧,今天算是个开始,我们就先熟悉这一些的typedef,这些东西都没啥难的,不过我们要注意一点,那就是上面我们提到的value_type,这里他既不是T也不是Key,而是一个pair<Key,T>,在pair里面,Key是键,T是值,在pair里面,有两个成员,一个first,一个second,我们来看看pair是啥东西就知道了,还记得我们说的快速排序吗?当时我把微软的源码拿出来,里面就用到了pair。
————————–
template<typename Key,Typename T>
class pair{
public:

Key first;



T second;



pair():first(Key()),second(T()){ }

pair(const Key&

x,const T&

y):first(x),second(y){ }

template<typename U,typename V>

pair(const pair<U,V>&

p):first(p.first),second(p.second){ }
};


—————————

Ok,今天先到这里吧。

==========================

回复D直接查看目录

原文始发于微信公众号(

C/C++的编程教室

):第七十五讲 细说map(1)

|

发表评论