2014-05-13 31 views
2

我有這樣的代碼:Unordered_map有indrection需要指針操作

int solution(int K, const vector<int> &A) { 
    int count=0,size,comp=0; 
    unordered_map<long,long> map; 

    size = A.size(); 
    if(size==0) 
     return 0; 

    for(int i=0;i<size;i++){ 
     map.insert(A[i],i); //error here 
    } 

    for(int i=0;i<size;i++){ 
     comp = K-A[i]; 
     unordered_map<long,long>::const_iterator index = map.find(comp); 
     if(index == map.end()) 
      continue; 
     else if(index->second != i){ 
     count++; 
    } 
    } 
    cout << "final count: " << count << endl; 
    return count;  
} 

似乎無法找出原因,它的抱怨。錯誤如下所示:

間接尋址需要指針操作數('int'無效) __table _.__ insert_unique(* __ first);

函數模板特殊化 '的std :: __ 1個:: unordered_map,性病:: __ 1 :: equal_to, 的std :: __ 1個::分配器>> ::插入',這裏要求 地圖的實例.insert(A [I],i)的;

任何人都可以解釋我最近怎麼回事?

也是用這個編譯:鐺++ -stdlib = libc的++ -std = GNU ++ 11 workingpairs.cpp

回答

3

您在map.insert(A[i],i)錯誤是因爲它要你插入容器value_type(一key/value對)。您使用兩個參數調用insert(),在這種情況下唯一匹配的重載不是您想要的。

你可以代替說:

map[A[i]] = i; 

map.insert(std::make_pair(A[i], i)); 

map.emplace(A[i], i); 
+0

這工作。謝謝! – jshah

-1

的std :: unordered_map ::插入件需要一對:

map.insert (std::pair<int,int>(A[i],i)); 

的兩參數版本需要一個迭代器,你不想在這裏。

-1

std::unordered_map::insert的兩個參數形式需要一對迭代器(插入一個範圍)或一個迭代器(充當插入元素的位置的提示)和一個元素。

您應該使用std::pair在與特定的鍵插入值:

map.insert(std::make_pair(A[i],i));