2016-04-15 47 views
0

我已經寫了很簡單的代碼來看看unordered_pa​​ir不能使unordered_map工作

// 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

你需要(至少)'C++ 11': 'g ++ -Wall -c「%f」-std = C++ 11'。 – Holt

+0

嘿,它與此謝謝:)我希望可以有另一種解決方案。有沒有辦法在舊標準中使用關聯容器? –

+0

如果你想要關聯容器,你有['std :: map'](http://en.cppreference.com/w/cpp/container/map)。與'unordered_map'的不同之處在於'map'使元素根據鍵保持不變,因此您對訪問,刪除有不同的複雜度...... – Holt

回答

2

unordered_map在C++ 11標準中引入的。如果你的G ++版本支持,您可以啓用C++ 11標準與選項-std=c++11

有中老年的標準

std::map使用關聯容器的方式是一個關聯容器。它存在於所有的C++標準中。

我試圖用unordered_map,因爲它是

unordered_map在某些情況下比速度更快的地圖。在其他情況下,map速度更快。在測量之前,不要採用一種方法。

但是,使用地圖,而-std = C++ 11仍然給了我同樣的錯誤如上

那是因爲你使用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); 
+0

這是非常感謝一堆。答案非常有幫助和信息。 :) –