7

C ++で次のタイプの2つのマップを使用することを計画しています。std::map<char, Node>ここNodeで、はカスタムクラスです。2つのマップがm1あり、上記のタイプで、に存在するすべてのキーが含まれm2ているかどうかを調べたいとします。つまり、とのキーのセットの共通部分が。のキーのセットと同じであることを確認したいと思います。m1m2m1m2m2

すべてのキーを繰り返してm2afind()またはcount()onを実行することもできますm1が、それは無駄に思え、おそらく遅くなります。これは、キーがバイナリ検索ツリーとしてソートされた順序でに格納されるためです。std::mapしたがって、各検索/カウントはO(logn)を取り、の次のキーについてはm2、のキーの同じパスm1が最初からトラバースされます。

私はSTLを初めて使用するので、簡単に実行できるはずのことについての無知を許してください。また、いくつかの簡単なサンプルコードスニペットまたはコードスニペットへのリンクは、理解を深めるのに非常に役立ちます。Boostを含む非標準ライブラリを使用できません。

前もって感謝します!

4

1 に答える 1

5

aのキーmapはソートされているため、両方を同時に繰り返し処理して、キーを相互に比較できます。の場合key(m1) < key(m2)、m1のイテレータをインクリメントします。その場合key(m2) < key(m1)、m2にはm1にないキーが含まれます。

これはO(n)です。

于 2012-10-08T03:59:57.273 に答える