我想知道如何使用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));
}
}
答案 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);
}
编辑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
的含义,所以我忽略了它)