为stl :: map使用value_type数组

时间:2012-11-19 22:53:54

标签: c++ arrays map find value-type

我有以下代码:

//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,可以做些什么?

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解您的代码和您的问题......但是如果您想要std::mapstd::string个关键字关联到int值,为什么要定义一个数组? (键,值)对?

以下是什么呢?

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;
}