У меня есть следующий код:
//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
?
Я не уверен, что хорошо понял ваш код и ваш вопрос … но если вы хотите 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;
}
Других решений пока нет …