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 其实是很少被调用的。