emplace_hint
のset/mapメソッドは、実際にアイテムが追加されたかどうかを判断するイテレータのみを返すので、emplace
またはinsert
を使用する場合ほど便利ではありません。今私はちょうど/後の前にコンテナのサイズを取得し、それらを比較:emplace_hint使用時にアイテムが追加されたかどうかを調べる
::std::map<int, int> items{};
const auto initial_items_count{items.size()};
const auto it_item{items.emplace_hint(items.begin(), 0, 5)};
if(items.size() != initial_items_count)
{
// perform additional actions...
}
それはペアを返すヘルパーに包ますることができ、多分、既存の単純なアプローチはありますか?
私は、通常、 'emplace_hint'と' lower_bound'の結果を結合するという考えを想像しています。その情報が行為の前に利用できるようにする。それ以外の場合、 'emplace_hint'は通常の' emplace'よりも保証されません。 – StoryTeller
'lower_bound'トリックは、PODのコンテナの良いアプローチです。クラスのコンテナの場合、コンストラクタが設定する 'bool&'というコンストラクタに対する追加のパラメータを常に持つことができます。 'emplace_hint'が返ってくると、' bool'の内容をチェックすることで、オブジェクトが構築されたかどうかがわかります。 –
@StoryTeller私の状況では、挿入される値は単調に減少していますが、値のかなりの部分は途中で変わりません。また、これらの値はやや重いので、コードを単純にして、常に 'begin'をヒントとして提供することにしました(常に最適ではないにもかかわらず、' emplace'に比べてパフォーマンスが向上します)。 – VTT