我编写了相当简单的代码来检查unordered_pair
// 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"
答案 0 :(得分:2)
unordered_map
是在C ++ 11标准中引入的。如果您的g ++版本支持它,则可以使用选项-std=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);