C ++无序映射

时间:2015-06-17 19:26:26

标签: c++ dictionary stl 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中遇到错误。我认为这是从迭代器访问元素的方法。有什么问题?

1 个答案:

答案 0 :(得分:2)

你不能说

c.find(k-x)

因为kintxstd::pair<int, int>。你的意思是这两个中的一个吗?

c.find(k - x.first)

或者

c.find(k - x.second)

作为旁注,直接从find退出返回的迭代器通常是不安全的,因为如果find返回.end()(因为它没有找到带有该元素的元素)键)然后你就遇到了问题。