C++ 无序映射具有INDIRECTION需要指针操作数
我有以下代码:C++ 无序映射具有INDIRECTION需要指针操作数,c++,c++11,unordered-map,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 }
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解决方案(int K,常数向量&A){
int count=0,size,comp=0;
无序地图;
大小=A.大小();
如果(大小==0)
返回0;
对于(int i=0;i>::在此处插入请求的'
地图。插入(A[i],i)
谁能解释一下发生了什么事
还可以使用它来编译:clang++-stdlib=libc++-std=gnu++11工作对。cppstd::unordered\u map::insert获取一对:
map.insert ( std::pair<int,int>(A[i],i) );
map.insert(std::pair(A[i],i));
双参数版本需要一个迭代器,您在这里不需要它。的双参数形式需要一对迭代器(插入一个范围),或者一个迭代器(作为插入元素位置的提示)和一个元素
您应该使用std::pair
在具有特定键的处插入值:
map.insert(std::make_pair(A[i],i));
map.insert(A[i],i)
上的错误是因为它希望您插入容器的value\u type
(一对key/value
项)。您使用两个参数调用insert()
,在这种情况下,唯一匹配的重载不是您想要的
你可以说:
map[A[i]] = i;
或
或
map.insert(std::make_pair(A[i], i));
map.emplace(A[i], i);