Unordered_map具有indrection需要指针操作数

时间:2014-05-13 04:09:37

标签: c++ c++11 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.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;    
}

似乎无法弄清楚为什么抱怨。错误如下所示:

间接需要指针操作数(&#39; int&#39;无效)         __table _.__ insert_unique(* __第一);

实例化函数模板特化&#st; :: __ 1 :: unordered_map,std :: __ 1 :: equal_to,       std :: __ 1 :: allocator&gt; &GT; ::插入&#39;这里要求         map.insert(A [I],i)的;

有谁能解释我的最新情况?

还使用它来编译:clang ++ -stdlib = libc ++ -std = gnu ++ 11 workingpairs.cpp

3 个答案:

答案 0 :(得分:3)

map.insert(A[i],i)上的错误是因为它要求您插入容器的value_typekey/value对)。您正在使用两个参数调用insert(),并且在这种情况下,唯一匹配的重载不是您想要的重载。

你可以说:

map[A[i]] = i;

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

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

答案 1 :(得分:-1)

std :: unordered_map :: insert需要一对:

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

双参数版本需要一个迭代器,你不需要这里。

答案 2 :(得分:-1)

std::unordered_map::insert的两个参数形式需要一对迭代器(插入一个范围),或一个迭代器(用作插入元素的位置的提示)和一个元素。

您应该使用std::pair在特定键处插入值:

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