9

の使用についていくつか質問がありますstd::map

  1. enumをキーとして使用するstd::mapことは適切ですか? 次のコードを検討してください。

    enum Shape{
        Circle,
        Rectangle
    };
    
    int main(int argc, char* argv[])
    {
         std::map<Shape,std::string> strMap;
         // strMap.insert(Shape::Circle,"Circle"); // This will not compile
         strMap[Shape::Circle] = "Circle";         // But this will work
         return 0;
    }
    
  2. 上記の例で、オーバーロードされた演算子が正しく動作しているのに、呼び出しinsert()によってコンパイラ エラーが発生するのはなぜですか? []アイテムを に挿入するために推奨される方法はどれstd::mapですか?

  3. find()メソッドがクラスで使用される場合std::map、コンテナ内で順次検索を行うのではなく、順次検索よりもはるかに高速な対数検索を行うことを理解しています。この理解は正しいでしょうか?

4

5 に答える 5

12
  1. key_type として列挙型を使用すること自体は悪くありません。(編集) ただし、連続した列挙値のみを使用する場合はstd::vector、O(1) アクセスを使用する方がさらに優れています。
  2. insert次のように使用する必要があります: cppreference.commapVar.insert(make_pair(key, value)); も参照してください。
  3. はい、std::map標準で保証されているように、O(log(n)) ルックアップがあり、n が十分に大きい場合、これは O(n) よりも高速です。
于 2009-01-28T18:30:16.900 に答える