2014-05-13 102 views
1

我有這樣的代碼:Unordered_map迭代器拋出錯誤

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[A[i]] = i; 
    } 

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

我得到無效的操作數錯誤,我無法弄清楚我在做什麼錯。我試過切換迭代器,但它也可能是我的編譯器。我使用這個編譯:

鐺++ -stdlib =的libC++ -std = GNU ++ 11 workingpairs.cpp

我的錯誤:預期 ';'聲明結束 unordered_map :: const_iterator index = map.find(comp);

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

在函數模板專業化的實例化 '的std :: __ 1個:: unordered_map,性病:: __ 1 :: equal_to, 的std :: __ 1 ::分配器>> ::插入',這裏要求

任何有識之士/幫助將不勝感激!

編輯:

我已經回到固定的錯誤。

+2

這是使用'汽車指數= map.find(COMP)的好地方;' – Blastfurnace

+0

@Blastfurnace代替const_interator的?或者除了它? – jshah

+0

我只會使用['auto'](http://en.cppreference.com/w/cpp/language/auto)關鍵字。編譯器已經知道表達式'map.find(comp)'的類型,因此它會將'index'聲明爲該類型。這些繁瑣的迭代器聲明沒有更多的錯別字。 – Blastfurnace

回答

2

您在下面的語句錯過::

unordered_map<long,long>const_iterator 

應該是:

unordered_map<long,long>::const_iterator 
+0

哇......謝謝! 我還有另一個錯誤:在函數模板專業化的實例化「的std :: __ 1 :: unordered_map <很長很長,性病:: __ 1 ::哈希,性病:: __ 1 :: equal_to , 的std :: __ 1 :: allocator >> insert ' map.insert(A [i],i);. 你知道那是什麼嗎? – jshah

+1

這是因爲'map.insert(A [i],i);',插入可以採取配對,而不是鍵/值直接 – billz