8

特定のキーを持つ要素をマップから削除し、この要素を使用することに興味があります。

次のようになります。

itr = MyMap.pop(wantedKey);
//Now MyMap is missing the element which has the key 'wantedKey'.
//Do something with this element through 'itr'.

これを行うための stl map メソッドはありますか?

編集

carleetoの応答に続いて、明確にしたい: 必要なのは、要素がマップから削除され、プログラムが後でそれを使用できるようにすることです。要素自体をペアとして使用することもできますが、必ずしもイテレータである必要はありません。

4

8 に答える 8

14

2 つのオプションがあります。インプレースで使用してから削除するか、ローカル変数に移動してエントリを削除してから使用します。

// use-remove
auto i = MyMap.find(wantedKey);
if (i != MyMap.end()) {
    // use-remove
    use(i->second);
    MyMap.erase(i);

    // or

    // move-remove-use
    auto x = std::move(i->second);
    MyMap.erase(i);
    use(x);
} else {
    // Not found
}
于 2013-06-10T21:00:38.640 に答える
4

私が知っていることではありませんが、std::map::findを使用してイテレータを取得し、完了したら、そのイテレータを引数としてstd::map::eraseを呼び出すことができます。

于 2013-06-10T21:00:47.213 に答える
0

私がやった方法は以下です。私の場合、マップは std::shared_ptr 値を格納し、コピーを安価に (っぽい) し、オブジェクトの所有権の譲渡を明確にします。

auto it = MyMap.find( wantedkey );
if ( it == MyMap.end() ) throw runtime_error("not found");
auto ret = it->second;          // make copy of shared_ptr
MyMap.erase(it);
return ret;

呼び出し元は、少なくとも 1 の参照カウントを持つ shared_ptr を (コピーから) 取得します。この関数は、shared_ptr を値などで返さなければならないことに注意してください。

于 2015-02-14T07:38:48.047 に答える
0

おそらくやりたいことは

itr = MyMap.find('thing in a string');

イテレータを見つけて使用するには、

MyMap.erase(itr)

そして、それを消去します。

于 2013-06-10T21:02:11.000 に答える