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)我需要实现opKeyopMap.

看起来我需要使用类的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 回答