c++ - 为什么map在(switch)格外变成空的?

标签 c++ dictionary hashmap g++ c++17

我有以下代码,在其中初始化 map ,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)显示 map
我不习惯用C++编程。

最佳答案

map<vector<int>, int> inserts;行声明了一个变量,该变量是发生该变量的函数的和本地。每次调用该函数时,都会创建变量的新“版本”(并将其初始化为空映射)。当函数返回时,inserts对象被破坏。
如果希望inserts对象在函数调用之间保留其值,则需要将其声明为全局变量(在函数外部/函数之前)。

forwhile循环内声明的变量也遵循相同的原理:该变量的范围为循环的一次迭代;每次循环运行时,都会创建该变量的新实例,并且当循环的每个迭代结束时,该变量将被销毁。在这种情况下,您需要在循环之前/之前声明和初始化变量。

关于c++ - 为什么map在(switch)格外变成空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63413098/

相关文章:

c++ - C++中的两种形式有区别吗?

python - 如何使用列表中的键和默认为零的值创建字典?

python - 检查变量是否为列表的最佳方法是什么?

android - Arraylist<hashmap<>> 值在 ListView 中重复

有或没有类型的 Java HashMap?

c++ - 编写我的第一个黑莓应用程序

c++ - C++:将文本数据与输入数据进行比较

java - Android 在用户使用 HashMap TransactionTooLargeException 加载 MainActivity 之前在预览屏幕上传递大数据

c++ - 如何在 QML 函数异步的同时使用 QML 中的 QThread

arrays - TypeScript 对象作为 C# 中的字典类型