2

STL コンテナsetmultisetについては、挿入関数の戻り値の型はすべて同じではありません。 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の最初の関数では、ペア構造体の2 番目のメンバーは、挿入が成功したかどうかを返します。同じ値を持つ要素が既に含まれている場合、セットに対する要素の挿入は失敗する可能性があります。しかし、setの 2 番目の関数では、挿入関数はイテレータを返すだけです.挿入が失敗した場合はどうなりますか?誰か教えてもらえますか? どうもありがとう。

4

1 に答える 1

1

しかし、setの2番目の関数では、insert関数はイテレータを返すだけです。挿入が失敗した場合はどうなりますか?

プレーン(ではなく)をset::insert返すだけのバージョンでは、既存の要素が見つかった場合、セットは変更されずに残され、(挿入を妨げた)既存の要素にイテレータを返します。iteratorpair<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 に答える