我是C ++的新手,我对c ++引用感到困惑,例如,std::map::insert引用,在开头,它有:
pair<iterator,bool> insert (const value_type& val);
template <class P> pair<iterator,bool> insert (P&& val);
iterator insert (const_iterator position, const value_type& val);
template <class P> iterator insert (const_iterator position, P&& val);
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
void insert (initializer_list<value_type> il);
在后面的示例中,它使用如下插入:
mymap.insert ( std::pair<char,int>('z',200) );
我可以从哪条参考线知道我可以使用上述insert
功能?
答案 0 :(得分:1)
std::pair<char const, int>
是value_type
的{{1}}。您引用的第一个mymap
重载需要insert
- const
的引用。
使用标准库引用需要语言和相应库部件的基本知识。在不了解类的情况下查找成员函数它是意志的成员,在大多数情况下,不能很好地工作。如果你看一下地图的参考,你会看到value_type
被定义为value_type
,因为pair<const key_type, mapped_type>
可以转换为pair<char, int>
而适合{ - 1}} - 你还需要了解pair<char const, int>
的工作原理。
答案 1 :(得分:1)
如果您在下面同一页面上阅读了参数部分,您会找到val
的以下说明:
Value to be copied to (or moved as) the inserted element.
Member type value_type is the type of the elements in the container, defined in map as pair<const key_type,mapped_type>
明确指出value_type
是容器中元素的类型,在map
中定义为pair<const key_type,mapped_type>
答案 2 :(得分:1)
假设您有一个std::map<char,int>
,那么
mymap.insert ( std::pair<char,int>('z',200) );
由于map定义了单个元素构造函数,因此允许
single element (1)
pair<iterator,bool> insert (const value_type& val);
template <class P> pair<iterator,bool> insert (P&& val);
如果你正在使用C ++ 11,第二个应该开始。在C ++ 03中,只有第一个可用。
文档说
Member type value_type is the type of the elements in the container, defined in map as
pair<const key_type,mapped_type>
因此std::pair<char,int>
是地图的value_type
,插入是有效的(临时可以绑定到左侧的const引用或C ++ 11中的右值引用)。
我并不打算同时查看cppreference,因为如果您遇到cplusplus.com问题可能会更难理解,但通常我会推荐它。