如何在for循环

时间:2017-10-25 23:38:02

标签: c++

我想知道如何使用for循环并设置输入映射! 这是我的想法,但有一些错误!

实际上我有一个Y,我想将一个元素映射到1,将其他元素映射到零!例如:

输入:Y = {2,3,4} 输出:[1,0,0],[0,1,0],[0,0,1]或换句话说:{2-> 1,3-> 0,4-> 0}, {2-> 0,3-> 1,4-> 0},{2-> 0,3-> 0,4-> 1} 我需要把我的外出作为矢量

for (iter = Y.begin(); iter != Y.end(); ++iter) {
  Map myMap;
  myMap.insert(std::make_pair(iter, 1));
  if (Y != iter) {
    myMap.insert(std::make_pair(Y, 0));
  }
}

1 个答案:

答案 0 :(得分:1)

请注意,由于您已在for循环内声明了地图myMap,因此您需要在循环的每次迭代中创建一个全新的地图。您也无法在循环外访问它。因此,您应该在循环之前声明它。

根据您的评论,您似乎尝试将您设置中的所有项目映射到0,但第一项除外。在这种情况下,首先将它们全部映射到0,然后只需更改第一个:

map<int, int> m;
for(auto iter = Y.begin(); iter != Y.end(); iter++) {
    m[*iter] = 0;
}
if(Y.size() != 0) {
    m[*Y.begin()] = 1;
}

修改

根据您的评论,这应该是您正在寻找的内容:

vector<map<int,int>> v;
for(auto iter = Y.begin(); iter != Y.end(); iter++) {
    map<int, int> m;
    for(auto iter2 = Y.begin(); iter2 != Y.end(); iter2++) {
        m[*iter2] = (*iter == *iter2);
    }
    v.push_back(m);
}

See it in action here

编辑2

经过更多评论后,听起来这就是您实际需要的内容:

int arr[ARR_SIZE][ARR_SIZE] = {0}; //initialize whole array to 0's

int count = 0;
for(auto iter = Y.begin(); iter != Y.end(); iter++, count++) {
    arr[count][*iter-1] = 1; //pick out the specific values we want to be 1
}

(请注意,我不确定e的含义,所以我忽略了它)

See it in action here