2

关于 STL 容器多集,插入函数的返回类型并不完全相同。 set提供如下接口:

pair<iterator,bool> insert(const value_type& elem); 
iterator  insert(iterator pos_hint, const value_type& elem); 

multiset提供如下接口:

iterator  insert(const value_type& elem); 
iterator  insert(iterator pos_hint, const value_type& elem);

set的第一个函数中,pair结构的成员second返回插入是否成功。如果集合中已经包含具有相同值的元素,则元素的插入可能会失败。但是在 set 的第二个函数,插入函数只是返回一个迭代器。如果插入失败会发生什么?有人能告诉我吗?非常感谢。

4

1 回答 1

1

但是在set的第二个函数中,insert函数只是返回了一个迭代器,如果插入失败会怎样呢?

set::insert仅返回普通元素iterator(而不是 a pair<iterator,bool>)的版本中,当找到现有元素时,该集合保持不变,并且insert将返回一个迭代器到现有元素(阻止插入)。

multiset::insert中,函数总是成功的。

23.2.4 关联容器要求

iterator a.insert(p, t)

效果:当且仅当在具有唯一键的容器中不存在与 t 的键等效的元素时,才插入 t;总是将 t 插入具有等效键的容器中。总是返回指向与 t 的键等效的元素的迭代器。t 被插入到尽可能靠近 p 之前的位置。

于 2012-04-14T01:12:36.803 回答