主页 > 游戏开发  > 

map的operator[]的实现

map的operator[]的实现
map的operator[]的实现

operator[]里包含插入操作,所以我们先看一下首先看一下map的insert函数

返回值是一个pair类型。正常的常见的insert,插入成功返回true,失败返回false

这里设计的insert不单单返回布尔值,而是返回一个pair类型,包含迭代器和布尔值。就是为了实现operator[]

插入规则:

key已经在map中,返回pair(key_iterator, false) (返回key位置的迭代器)key不在map中,返回pair(newly_inserted_iterator, true) (返回新插入元素的迭代器)

所以,insert也充当了查找的作用

那么operator[]是如何实现的呢?

operator[key]:

若key存在,返回value的引用若key不存在,新插入一个pair(key, value()),并返回value的引用

所以operator不管怎样,都会返回key对应的value的引用,只是有可能value是新插入的。因此就可以这样来写:

V& operator[](const K& key){ pair<iterator,bool> ret = insert(make_pair(key,V())); return ret.first->second; } // 简写: V& operator[](const K& key){ return ((insert(make_pair(key,V()))).first)->second; }

这里有两个pair。一个是insert的返回值的pair<iterator,bool> ;另一个是iterator指向的元素 pair<key_type,value_type>

标签:

map的operator[]的实现由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“map的operator[]的实现