2015-06-17 2 views
1

У меня есть программа, в которой я использую итератор, чтобы получить доступ к значению записи в карте.C++ Unordered Map

#include <iostream> 
#include <cstdio> 
#include <unordered_map> 
#include <utility> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
    int a[]={1,2,4,7,9,3,3,55,66,88,11}; 
    int k = 58; 
    unordered_map<int,int> c; 
    int i=0; 
    for(auto x: a) 
    { 
     c.insert(make_pair(x,i)); 
     i++; 
    } 

    for(auto x: c) 
    { 
    if(c.count(k-x.first)==1) printf("%d %d\n",x.second,(c.find(k-x))->second); 
    } 

} 

В строке:

if(c.count(k-x.first)==1) printf("%d %d\n",x.second,(c.find(k-x))->second); 

Я получаю ошибки, особенно в c.find()->second. Я думаю, что это способ доступа к элементам из итератора. Что не так?

ответ

2

Вы не можете сказать

c.find(k-x) 

Поскольку k является int и x является std::pair<int, int>. Вы имеете в виду одного из этих двух?

c.find(k - x.first) 

Или

c.find(k - x.second) 

В качестве примечания, как правило, небезопасен непосредственно derefernce возвращаемого итератора из find, потому что если find возвращает .end() (как, он не нашел элемент с этим ключ), то у вас есть проблема.

+0

Да, я сделал это в счет, забыл в поиске. Большое спасибо. – adrian008