Unordered_map具有间接要求指针操作数

Unordered_map has indrection requires pointer operand

本文关键字:指针 操作数 map Unordered      更新时间:2023-10-16

我有这样的代码:

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, std::__1::equal_to,Std::__1::allocator>>::insert'请求在这里map.insert([我],我),

谁能给我解释一下这是怎么回事?clang++ -stdlib=libc++ -std=gnu++11 workingpairs.cpp

您在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);

std::unordered_map::insert接受一对参数:

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

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

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

您应该使用std::pair来插入具有特定键的值:

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