我如何将输入分配给在 for 循环中设置的映射功能

how I can assign input to map function with set in the for loop

本文关键字:循环 设置 功能 映射 for 输入 分配      更新时间:2023-10-16

我想知道如何使用 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));
  }
}
请注意

,由于您已经声明了映射,因此myMap for 循环内部,因此每次循环迭代都会创建一个全新的映射。您也无法在循环之外访问它。因此,您应该在循环之前声明它。

从您的评论来看,您似乎正在尝试将集合中的所有项目映射到 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);
}

在这里查看它的实际效果

编辑 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是什么意思,所以我忽略了它)

在这里查看它的实际效果