1

私はイテレータのペアを持っています:

pair <multimap<CFile,Filetype>::iterator, multimap<CFile,Filetype>::iterator> range;
range = m_DirectoryMap.equal_range(obj);

そのペアは、MultiMap で重複した要素を保持します。たとえば、さらに 2 つの重複 (基本的には 3 つのオブジェクト) を持つ 1 つのオブジェクトがあり、そのうちの 2 つを削除する必要があるため、1 つだけが残ります。

次のように、単純な while ループでこれを行っていました。

auto it = range.first;
++it;
while (it != range.second)
        it = m_DirectoryMap.erase(it);

その後、私の目標である 1 つのオブジェクトだけが残りました。後で、1 回の関数呼び出しでペア全体を消去しようとする必要があり、次のようにループが必要ないことがわかりました。

m_DirectoryMap.erase(range.first, range.second);

これはよりクリーンに見えますが、問題はすべてのオブジェクトが削除されることです。

それから私は試しました:

m_DirectoryMap.erase(++range.first, range.second);

これは最初のオブジェクトを残して残りを削除するように見えるので、私にとってはうまくいきますが、私の質問は、これは正しい方法ですか、私が探しているものですか?

4

0 に答える 0