0

次のコードがあります。

//MyClass.h
class MyClass {
      typedef std::map<std::string, int> OpMap;
      static const OpMap::value_type opMap[OP_COUNT];

    public:
     //methods
};

//MyClass.cpp
const MyClass ::OpMap::value_type MyClass ::opMap[DDG::OP_COUNT] = {
    MyClass ::OpMap::value_type("hello", 42),
    MyClass ::OpMap::value_type("world", 88),
};

bool findOP(string opKey)を検索するopKey関数を実装する必要がありますopMap

クラスのfindメソッドを使用する必要があるようです。mapしかし、ペアの配列であるopMap.find(opKey)ため、機能しません。opMapで効果的に検索するにはどうすればよいopKeyですopMapか?

4

1 に答える 1

1

あなたのコードとあなたの質問をよく理解できたかどうかはわかりません...しかし、キーを値にstd::map関連付ける必要がある場合、(キー、値) ペアの配列を定義するのはなぜですか?std::stringint

代わりに、次はどうですか?

std::map<std::string, int> m;
m["hello"] = 42;
m["world"] = 88;

順序付けられていない配列がある場合(コードのようopMapに) 何かを検索したい場合は、線形検索( O(N)) を実行できると思います。配列がソートされている場合にのみ、たとえば(対数漸近的複雑度を持つ)二分探索を使用して検索を最適化できます。std::lower_bound()

配列の内容からマップを初期化する場合は、次のopMapようにすることができます。

// opMap is an array of (key, value) pairs
// m is a std::map<std::string, int>
// 
// For each item in the array:
for (int i = 0; i < DDG::OP_COUNT; i++)
{
  // opMap[i].first is the key;
  // opMap[i].second is the value.
  // Add current key-value pair in the map.
  m[ opMap[i].first ] = opMap[i].second;
}
于 2012-11-19T23:01:54.863 に答える