C++ 分配或插入时出现无序的_映射错误

C++ 分配或插入时出现无序的_映射错误,c++,unordered-map,C++,Unordered Map,每当我尝试一次初始化/分配或插入大量元素时,它不会插入项目,然后会跳过函数的其余部分 我的映射类型为int,结构包含6个常量字符*,有大约70个元素需要初始化映射。我试着使用较少的元素(~50个),但仍然失败了 我试着一行一行地调试它,它将运行前20个元素,然后开始跳过它们,例如插入(elem_20),然后跳到插入(elem_22),并且{pair20,pair21,pair22}将跳过pair21,直接跳到pair22,据我所知,这似乎是随机的 我尝试了以下方法: // global

每当我尝试一次初始化/分配或插入大量元素时,它不会插入项目,然后会跳过函数的其余部分

我的映射类型为int,结构包含6个常量字符*,有大约70个元素需要初始化映射。我试着使用较少的元素(~50个),但仍然失败了

我试着一行一行地调试它,它将运行前20个元素,然后开始跳过它们,例如插入(elem_20),然后跳到插入(elem_22),并且{pair20,pair21,pair22}将跳过pair21,直接跳到pair22,据我所知,这似乎是随机的

我尝试了以下方法:

    // global scope, won't initialise the map
    unordered_map<int, struct> my_map = {std::make_pair(...), ...};
问题视频:

您可以看到第一个断点被触发,但是函数末尾的断点没有被触发,函数调用之后的断点也没有被触发

我在MacOS 10.14上使用Xcode

任何帮助都将不胜感激

干杯

编辑:对不起,我不太擅长解释


编辑2:添加视频

我将把它作为一个答案,即使它不应该是因为您没有提供任何可复制的代码或足够的信息,所以我只能在这里猜测。当使用任何类型的
映射
时,当然包括
无序映射
,每个键只允许一个条目。您没有指定如何确定密钥,但我猜测您有输入新值但覆盖现有密钥的情况。

我将把这作为一个答案,即使它不应该是因为您没有提供任何可复制的代码或足够的信息,所以我只能在这里猜测。当使用任何类型的
映射
时,当然包括
无序映射
,每个键只允许一个条目。您没有指定如何确定密钥,但我猜您有输入新值但覆盖现有密钥的情况。

您的无序映射在此处初始化:

unordered_map<int, struct> my_map = {std::make_pair(...), ...};
请注意,我的_map={blah}等价于

my_map = unordered_map<int, struct>{blah}
my_map=unordered_map{blah}
调用my_映射的赋值运算符


这可能就是你所说的bug

您的无序映射在此处初始化:

unordered_map<int, struct> my_map = {std::make_pair(...), ...};
请注意,我的_map={blah}等价于

my_map = unordered_map<int, struct>{blah}
my_map=unordered_map{blah}
调用my_映射的赋值运算符


这可能就是你所说的bug

你怎么知道它跳过了?制作一个显示问题的脚本。我们需要的不仅仅是“然后就会有马车”。我要说的是,把这件事说清楚,但如果你的莫哈韦和我的一样,那就没有了。High Sierra是善良的最后堡垒。“对不起,我不太擅长解释”-这就是为什么我们要求您发布产生真正问题的真实代码。它不一定是你发现问题的代码;它只需要复制对我们来说是什么问题。当我们复制/粘贴/编译/运行相同的文件时,用足够的代码在一个备用源文件中手工制作您正在做的事情,以便为我们重现问题。张贴,我们有一个真正的,我们可以与之合作。在这和你的描述之间,我们大概可以知道发生了什么。回到你身边。你为什么不举个例子呢?我有一个怀疑,但现在它是一个摇摆(疯狂的猜测),这使得糟糕的答案。如果我从你身上看到确实产生问题的东西,我可以证实/反驳这种怀疑。“断点没有触发”并不是知道跳过问题的简单方法。在优化编译器和调试符号不准确之间,断点不是确定程序中真正发生了什么的可靠方法(除非您是在没有优化的情况下编译)。程序是否实际产生不正确的输出?或者调试器只是做了一些你不懂的事情?你怎么知道它跳过了?制作一个演示问题的脚本。我们需要的不仅仅是“然后就会有马车”。我要说的是,把这件事说清楚,但如果你的莫哈韦和我的一样,那就没有了。High Sierra是善良的最后堡垒。“对不起,我不太擅长解释”-这就是为什么我们要求您发布产生真正问题的真实代码。它不一定是你发现问题的代码;它只需要复制对我们来说是什么问题。当我们复制/粘贴/编译/运行相同的文件时,用足够的代码在一个备用源文件中手工制作您正在做的事情,以便为我们重现问题。张贴,我们有一个真正的,我们可以与之合作。在这和你的描述之间,我们大概可以知道发生了什么。回到你身边。你为什么不举个例子呢?我有一个怀疑,但现在它是一个摇摆(疯狂的猜测),这使得糟糕的答案。如果我从你身上看到确实产生问题的东西,我可以证实/反驳这种怀疑。“断点没有触发”并不是知道跳过问题的简单方法。在优化编译器和调试符号不准确之间,断点不是确定程序中真正发生了什么的可靠方法(除非您是在没有优化的情况下编译)。程序是否实际产生不正确的输出?或者调试器只是做了一些你不理解的事情?复制70个插入有多难?至于钥匙,每一把都是独一无二的,我反复检查了50次。这不是因为有多难,而是因为你没有提供足够的信息。例如,您没有分享密钥是如何生成的。这只是一个枚举,我会制作一个问题的视频,因为我在explaining@MaxLanghof看起来它正在工作复制70个插入有多难?至于钥匙,每一把都是独一无二的,我反复检查了50次。这不是因为有多难,而是因为你没有提供足够的信息。例如,您没有分享密钥是如何生成的。这只是一个枚举,我会制作一个问题的视频,因为我在explaining@MaxLanghof看起来我
my_map = unordered_map<int, struct>{blah}