首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

stl中的map如何返回元素的引用

2012-04-05 
stl中的map怎么返回元素的引用?我要返回第一个元素的引用,但是MAP::iteratorsearch_iteratorm_map.begin(

stl中的map怎么返回元素的引用?
我要返回第一个元素的引用,但是MAP::iterator   search_iterator   =   m_map.begin();这句提示错误:
Error1error   C2440:   'initializing '   :   cannot   convert   from   'std::_Tree <_Traits> ::const_iterator '   to   'std::_Tree <_Traits> ::iterator 'e:\maptest2\maptest2\stringmap.h90


源代码中的begin函数是这样写的  
        iterator   begin()  
                {         //   return   iterator   for   beginning   of   mutable   sequence  
                return   (_TREE_ITERATOR(_Lmost()));  
                }  

        const_iterator   begin()   const  
                {         //   return   iterator   for   beginning   of   nonmutable   sequence  
                return   (_TREE_CONST_ITERATOR(_Lmost()));  
                }  
奇怪的是,两个函数只有返回值不同,是怎么重载的?  


[解决办法]
你可能把MAP::iterator search_iterator = m_map.begin();写到了一个const函数中(函数末尾的const)。试试去掉const看看。

[解决办法]
To:lovecreak(探路者)
函数的返回类型不可能决定调用哪个函数,只通过返回类型是不能进行重载的。
map中的两个begin()是因为后面的const才实现的重载。
这里,如果调用这个函数的对象如果是const的,则调用const_iterator begin() const
负责,调用iterator begin()。而我们很少将一个map声明为const的,所以,const_iterator begin() const 其实是很少被调用的。

热点排行