注册 登录
编程论坛 C++教室

map映射容器的insert函数的参数不对啊~~~~~~~~~~

okokpypy 发布于 2017-08-06 21:42, 1965 次点击
pair<iterator, bool> insert (const pair<KEY_TYPE, VALUE_TYPE> & val);
//pair<KEY_TYPE, VALUE_TYPE>类型是一个具体化为KEY_TYPE型 和 VALUE_TYPE型的pair类对象,
VALUE_TYPE型是pair<const Key, Type>的类型别名,是具体化为const Key型 和 Type型的pair类对象
为什么实际使用是后者?即insert(VALUE_TYPE & val);
6 回复
#2
rjsp2017-08-07 08:24
听不懂你在说什么,以下代码是从C++标准文档中摘出来的

template< class Key, class T, class Compare=less<Key>, class Allocator=allocator<pair<const Key,T>> >
class map
{
public:
    …………
    using value_type = pair<const Key, T>;
    …………
    pair<iterator, bool> insert(const value_type& x);
    …………
};
#3
okokpypy2017-08-07 09:27
回复 2楼 rjsp
insert的语法格式不是这个?
pair<iterator, bool> insert (const pair<KEY_TYPE, VALUE_TYPE> & val);
#4
okokpypy2017-08-07 09:39
回复 3楼 okokpypy
按照你给出的代码应该是这个:
pair<iterator, bool> insert (const pair<const key, T> & val);
那么第一个具体化参数const key就等于KEY_TYPE,
第二个具体化参数T就等于VALUE_TYPE,但是T可以是任意类型,而VALUE_TYPE只能是pair类的对象,不可能一样啊
#5
rjsp2017-08-07 11:45
以下是引用okokpypy在2017-8-7 09:39:56的发言:

第二个具体化参数T就等于VALUE_TYPE,但是T可以是任意类型,而VALUE_TYPE只能是pair类的对象,不可能一样啊

不知道你在说什么,VALUE_TYPE 哪里来的,是个什么东西?
既然在说C++,那就得以ISO的“C++标准文档”为依据。
#6
okokpypy2017-08-07 12:33
回复 5楼 rjsp
总之,按照c++标准文档,insert语法是:
pair<iterator, bool> insert (const pair<const key, T> & val);
对吧?
1楼的语法是书上写的,估计是错的~
#7
rjsp2017-08-07 16:09
按照c++标准文档,insert语法是:
pair<iterator, bool> insert (const pair<const key, T>& val);
对吧?
------ 对
1