我收到此编译错误:
错误:一元'
*
'的无效类型参数(有'int
')
_M_insert_unique_(end(), *__first);
我已尝试使用(*cols_it).first
和(*cols_it).second
以及我能想到的所有其他排列,但我无法进行编译。我该怎么写?
这里有一些代码:
#include <map>
#include <vector>
using std::map;
using std::vector;
void setZeroes(vector<vector<int> > &A) {
map<int,int> rows;
map<int,int> cols;
for (unsigned int x = 0; x < A[0].size(); x++) {
for (unsigned int y = 0; y < A.size(); y++) {
if (A[x][y] == 0) {
rows.insert(y,y); // error reported here
cols.insert(x,x);
}
}
}
map<int,int>::iterator rows_it = rows.begin();
map<int,int>::iterator cols_it = cols.begin();
while (rows_it != rows.end()) {
for (unsigned int i = 0; i < A[0].size(); i++) {
int val = rows_it->second;
A[val][i] = 0;
}
rows_it++;
}
while (cols_it != cols.end()) {
for (unsigned int i = 0; i < A.size(); i++) {
int val = cols_it->second;
A[i][val] = 0;
}
cols_it++;
}
}
答案 0 :(得分:4)
rows.insert(y,y);
和cols.insert(x,x);
无效,std::map::insert
期望std::pair<>
为其参数。
你可以:
rows.insert(std::make_pair(y,y));
cols.insert(std::make_pair(x,x));
或使用list initialization(自C ++ 11起):
rows.insert({y,y});
cols.insert({x,x});
或使用std::map::emplace(因为C ++ 11)而不是:
rows.emplace(y,y);
cols.emplace(x,x);