C ++ STL unordered_map проблемы и сомнения - PullRequest
4 голосов
/ 12 ноября 2009

после нескольких лет в Java и C # теперь я вернулся к C ++. Конечно, на мой стиль программирования влияют эти языки, и я склонен чувствовать потребность в специальном компоненте, который я широко использовал: HASH MAP. В STL есть hash_map, который GCC говорит, что он устарел, и я должен использовать unordered_map. Поэтому я обратился к этому. Признаюсь, я не уверен в переносимости того, что я делаю, потому что мне пришлось использовать переключатель компилятора, чтобы включить функцию -std = c ++ 0x, которая соответствует будущему стандарту. Во всяком случае, я доволен этим. Пока я не могу заставить его работать с тех пор, если я положу в свой класс

std::unordered_map<unsigned int, baseController*> actionControllers;

и в методе:

void baseController::attachActionController(unsigned int *actionArr, int len,
        baseController *controller) {
    for (int i = 0; i < len; i++){
        actionControllers.insert(actionArr[i], controller);
    }
}

он выходит с обычными иероглифами, которые говорят, что не могут найти вставку вокруг ... подсказки?

Ответы [ 5 ]

18 голосов
/ 12 ноября 2009

insert принимает один аргумент, представляющий собой пару ключ-значение, типа std::pair<const key_type, mapped_type>. Так что вы бы использовали это так:

actionControllers.insert(std::make_pair(actionArr[i], controller));
9 голосов
/ 12 ноября 2009

Просто используйте:

actionControllers[ actionArr[i] ] = controller;

это оператор, перегружающий Java, должен вам целую вечность:)

4 голосов
/ 16 ноября 2009

Если вы уже решили использовать (экспериментальный и еще не готовый) C ++ 0x, то вы можете использовать такой синтаксис для вставки пары ключ-значение в unordered_map:

  actionControllers.insert({ actionArr[i], controller });

Это поддерживается gcc 4.4.0

2 голосов
/ 12 ноября 2009

Попробуйте:

actionControllers.insert(std::make_pair(actionArr[i], controller));
1 голос
/ 12 ноября 2009

STL insert обычно map.insert(PAIR(key, value));. Может в этом твоя проблема?

ПАРА будет std::unordered_map<unsigned int, baseController*>::value_type

...