Использование массива value_type для stl :: map

У меня есть следующий код:

//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

Решение

Я не уверен, что хорошо понял ваш код и ваш вопрос … но если вы хотите 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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]