C++ STL unordered_map问题和疑惑

got*_*ch4 4 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;
Run Code Online (Sandbox Code Playgroud)

并在一个方法中:

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

它出现了通常的象形文字说它无法找到插入...提示?

Mik*_*our 18

insert采用类型的单个参数,这是一个键值对std::pair<const key_type, mapped_type>.所以你会像这样使用它:

actionControllers.insert(std::make_pair(actionArr[i], controller));
Run Code Online (Sandbox Code Playgroud)


J-1*_*DiZ 9

只需使用:

actionControllers[ actionArr[i] ] = controller;
Run Code Online (Sandbox Code Playgroud)

这是运算符重载java欠你多年:)

  • +1:好点.值得注意的是这和`insert`之间的区别:如果地图已经有一个键的条目,那么`map [key] = value;`将改变现有的值,而`map.insert(make_pair(key,value) ))`不会(并且有一个返回值表示它失败了). (5认同)