我有以下代码:
//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
,可以做些什么?
答案 0 :(得分:1)
我不确定我是否理解您的代码和您的问题......但是如果您想要std::map
将std::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;
}