map iterator:unary' *'的无效类型参数(有' int')

时间:2016-04-12 05:31:46

标签: c++ dictionary iterator

我收到此编译错误:

  

错误:一元' *'的无效类型参数(有' 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++;
    }
}

1 个答案:

答案 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);