无法使unordered_map工作

时间:2016-04-15 09:08:03

标签: c++

我编写了相当简单的代码来检查unordered_pa​​ir

// unordered_map example
#include <iostream>
#include <unordered_map>
int main (){
    std::unordered_map<double, double> mymap = {
        {5,2.3},
        {7,34},
        {4,12}
    };
    std::cout<<":::: unordered_map ::::"<<std::endl;
    std::cout<<"5 ->"<<mymap[5]<<std::endl;
    std::cout<<"7 ->"<<mymap[7]<<std::endl;
    std::cout<<"4 ->"<<mymap[4]<<std::endl;
    std::cout<<"Done ! ";
    return 0;
}

我收到以下错误

unordered_map.cpp:5:37: error: non-aggregate type 'std::unordered_map<double, double>' cannot be initialized with an initializer list
        std::unordered_map<double, double> mymap = {
                                           ^       ~
1 error generated.
Compilation failed  

我正在使用OSX并使用geany Geany中的构建命令是:

g++ -Wall -c "%f"

1 个答案:

答案 0 :(得分:2)

unordered_map是在C ++ 11标准中引入的。如果您的g ++版本支持它,则可以使用选项-std=c++11

启用c ++ 11标准
  

有没有办法在旧标准中使用关联容器

std::map是一个关联容器。它存在于所有c ++标准中。

  

我试图使用unordered_map,因为它比map

更快
在某些情况下,

unordered_map会更快。 map在其他情况下更快。在你测量之前不要采取一种方式。

  

但是,使用不带-std = c ++ 11的map仍会给出与上面相同的错误

那是因为你使用了list initialization,这也需要c ++ 11。

初始化地图的旧方法:

std::map<int, int> m;
m[1] = 3;
m[2] = 2;
m[3] = 1;

Boost有一个简洁的模板,用于列出初始化的类似语法:

map<int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);