0

私は持っている

std::list<multimap<std::string,std::string>::iterator> >

今、私は新しい要素を持っています:

multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")

temp multimap を設定する必要を避けたいので、イテレータを元に戻すためだけに新しい要素に挿入して、次の場所にプッシュすることができます。

std::list<multimap<std::string,std::string>::iterator> >

この一時マルチマップの作成をなんとか回避できますか。ありがとう

4

4 に答える 4

2

マルチマップのイテレータを取得する前に、キーと値のペアをマルチマップに挿入する必要があります。

イテレータは単独では機能しません。いくつかの異なる multimap からイテレータを格納している場合、リストにイテレータ以上のものを格納する必要があるでしょう。

多分:

  1. 最初は反復子で、pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>::iterator>2 番目は終了反復子です。

  2. 最初はイテレータ、pair<multimap<std::string,std::string>::iterator, multimap<std::string,std::string>*>2 番目はイテレータが属するマルチマップへのポインタです。

  3. 他の種類のソリューション。

編集: Mykola Golubyev に同意します: イテレータが無効になる可能性があるため、イテレータを長期間保存することはしばしば悪い考えです。

于 2009-03-23T09:58:14.210 に答える
2

に格納するデータ型が指定されていませんlist。とにかく、特定のキーが指す値を追加したいと仮定すると、 を呼び出すことができますlist.insert(*mapIter)

multimap<std::string,std::string>::value_type aNewMmapValue("foo1","test")

これを 経由でマルチマップに追加する必要がありますmap.insert。この関数は反復子を返します。その後、この反復子を安全にリストに追加できます。

std::list<multimap<std::string,std::string>::iterator> yourlist;
// ....
multimap<std::string,std::string>::iterator itr = 
                               yourmultimap.insert(aNewMmapValue);
yourlist.insert(itr);
于 2009-03-23T09:48:18.400 に答える
1

この型は、 std::multimap に格納されたstd::multimap<std::string,std::string>::iteratorへの反復子です。要素がマルチマップに格納されていない場合、マルチマップ イテレータを介して参照することはできません。std::pair<const std::string, std::string>

代わりにa を使用して保存することもできますstd::list<std::pair<std::string,std::string> >

于 2009-03-23T16:06:24.217 に答える
1

イテレータを格納しないでください。const イテレータを使用するか、マップ内の要素へのポインターを格納するより良い方法を使用します。

于 2010-04-10T04:50:14.817 に答える