C ++ STL unordered_map问题和疑惑

时间:2009-11-12 12:28:21

标签: c++ stl hashmap c++11

在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 个答案:

答案 0 :(得分:18)

insert接受一个类型为std::pair<const key_type, mapped_type>的键值对的参数。所以你会这样使用它:

actionControllers.insert(std::make_pair(actionArr[i], controller));

答案 1 :(得分:9)

只需使用:

actionControllers[ actionArr[i] ] = controller;

这是运营商重载java欠你的年龄:)

答案 2 :(得分:4)

如果您已经决定使用(expreimental但尚未准备好)C ++ 0x,那么您可以使用这样的语法将键值对插入到unordered_map中:

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

gcc 4.4.0支持此功能

答案 3 :(得分:2)

尝试:

actionControllers.insert(std::make_pair(actionArr[i], controller));

答案 4 :(得分:1)

STL insert通常是map.insert(PAIR(key, value));。也许那是你的问题?

PAIR将为std::unordered_map<unsigned int, baseController*>::value_type