为什么地图在(开关)情况之外变成空的



我有下面的代码,在这里我初始化我的映射inserts,并查看在第一种情况下是否正确输入了数据。然后我在情况2中再次查看我的数据,但它显示在情况2中它是空的,但在情况1中它是存在的。我从未见过这种行为。

int main() {
int t;
cin>>t;
while(t--) {
int n, m;
cin>>n>>m;
while(m--) {
string s;
map<vector<int>, int> inserts;
int x, y, z, W;
int x1, y1, z1, x2, y2, z2;
cin>>s;
switch(resolveOptions(s)) {
case update:
cin>>x>>y>>z>>W;
inserts.insert({{x,y,z}, W});
cout<<"Inserts in u: ";
showInserts(inserts);
break;
case query:
cin>>x1>>y1>>x1>>x2>>y2>>z2;
cout<<"inserts in q";
showInserts(inserts);
// calculateSum(x1, y1, z1, x2, y2, z2, inserts)<<endl;
break;
}
}
}

showInserts(inserts)显示地图

我不习惯用C++编程。

map<vector<int>, int> inserts;向发生该变量的函数声明一个局部变量。每次调用该函数时,都会创建一个新的变量"版本"(并初始化为空映射(。当函数返回时,inserts对象将被销毁。

如果希望inserts对象在函数调用之间保留其值,则需要将其声明为全局变量(在函数外部/之前(。


对于在forwhile循环内声明的变量,同样的原理也适用:该变量的范围是循环的一次迭代;每次运行循环时,都会创建一个新的变量实例,当循环的每次迭代结束时,变量就会被销毁。在这种情况下,您需要在循环外部/之前声明并初始化变量。

#include<bits/stdc++.h>
using namespace std;
map<vector<int>, int> inserts;
void test(int n) {
int x, y, z, W;
int x1, y1, z1, x2, y2, z2;
cin>>s;
switch(resolveOptions(s)) {
case update:
cin>>x>>y>>z>>W;
inserts.insert({{x,y,z}, W});
cout<<"Inserts in u: ";
showInserts(inserts);
break;
case query:
cin>>x1>>y1>>x1>>x2>>y2>>z2;
cout<<"inserts in q";
showInserts(inserts);
// calculateSum(x1, y1, z1, x2, y2, z2, inserts)<<endl;
break;
}
}
int main() {
test(1);
test(2);
}

只需声明映射<向量,int>插入物;全球化以保持其价值。

相关内容

最新更新