2016-01-07 50 views
-4

的我想編譯此線。插入映射std :: arrays對。初始化地圖對的std ::陣列C++ 11

#include<iostream> 
#include<map> 
#include<array> 
#include<utility> 

using namespace std; 

int main() 
{ 
    array<double, 8> l; 
    array<double, 8> r; 
    map<double, pair<array<double, 8>, array<double, 8>>> m; 
    pair<array<double, 8>, array<double, 8>> p; 
    p = make_pair(l, r);//ok 
    m.insert(1., make_pair(l, r));//not ok 
    return 0; 
} 

//clear && g++ getMinPosition.cpp -std=c++11 -o getMinPosition && ./getMinPosition 
+0

請始終包含錯誤文本。另外,嘗試過的地方? – Yakk

+3

您應該檢查文檔爲你調用的函數:http://en.cppreference.com/w/cpp/container/map/insert - 沒有版本需要爲key_type和mapped_type作爲單獨的函數參數。請參閱http://en.cppreference.com/w/cpp/container/map查看value_type是什麼。 – user433534

回答

3

std::map::insert有各種重載,但不接受代碼中的兩個類型參數。離您最近使用的是一個接受const value_type&其中value_typepair<const key_type, mapped_type>的別名。

所以不是:

m.insert(1., make_pair(l, r));//not ok 

做:

m.insert(make_pair(1., make_pair(l, r))); 

或:

m.insert({ 1., make_pair(l, r) }); 
m.insert({ 1., {l, r} }); 

或更好的性能,使用emplace

m.emplace(1., make_pair(l, r)); 
+0

值得套結對,爲什麼什麼OP試過是行不通的一張紙條:'的std ::地圖:: insert'預計double'的''一個的std :: pair'和'對<陣列,陣列>' – user4581301

+0

或使用'm.emplace(1,make_pair(l,r));' –

1

std::map::insert()需要std::map::value_type這是std::pair<const Key, T>。所以,你所要做的

m.insert(make_pair(1., make_pair(l, r))); 

但我建議你使用emplace()代替:

m.emplace(1., make_pair(l, r)); 

甚至

m.emplace(std::piecewise_construct, 
    std::forward_as_tuple(1.), std::forward_as_tuple(l, r)); 

,這樣你就無法創建臨時對在兩者之間。