我重新学习了 map 结构,我正在尝试使用一个,但似乎无法解决一个问题。
我试过下面的代码:
map<string, valuePair> translator;
类 valuePair 只是 2 个对象(字符串和数字)的组合。
我正在为 map 赋值
translator[currentWord] = valuePair(stateNo, "state");
其中currentWord是一个可变字符串,stateNo是一个int。
现在我想从 map 中取回 valuePair 数字值,但似乎做不到。 这是我试图访问变量 x 的监 window 口的屏幕截图。 http://i.imgur.com/m3MOgi2.png
这些都是我设法在网上找到的返回值的方法,但似乎都没有用。如您所见,键“a”在 map 中。我做错了什么?
[编辑] 谢谢大家,我使用了你们在评论中给出的提示,发现它实际上按照我预期的方式工作——translator["a"].x 打印出我需要的值。不过,我没有任何可标记为“正确答案”的内容,而且我现在不确定如何处理此线程:/
最佳答案
正如 Jonathan Henson 在评论中发表的那样,与调试器输出相比,您最好发布自己的代码。理想情况下,您需要一个最小的示例来重现您遇到的错误。
根据调试器输出,我想知道您是否遇到了范围问题——您正试图访问您定义的范围之外的 map 数据。虽然没有看到源代码,但没有办法知道。
这是一个工作示例,它可以准确地完成您想要做的事情。唯一的修改是我为 valuePair 和 c++ 11 初始化程序列表使用了一个结构。这不会影响 map 访问代码,但您可能需要打开 c++ 11 支持才能对其进行编译。
作为第一步,请在您的调试器中检查它,看看您是否遇到了同样的困难。如果是这样,您的问题是调试器或调试器设置,而不是您的代码。
如果调试器适用于示例代码(在下面发布),请逐渐将我的代码转换为您的代码(进行最小的更改、构建,然后查看它是否仍然有效)。这是学习语言精髓的一种非常有用的方法。
#include <iostream>
#include <map>
#include <string>
using namespace std;
struct valuePair
{
int num;
string str;
};
int main()
{
map<string, valuePair> translator;
translator["a"] = {0,"bla"};
translator["b"] = {1, "alb"};
translator["c"] = {2, "lab"};
valuePair res = translator["c"];
cout << "c:" << res.num << "," << res.str << "\n";
res = translator.at("b");
cout << "b:" << res.num << "," << res.str << "\n";
res = translator.find("a")->second;
cout << "a:" << res.num << "," << res.str << "\n";
return 0;
}
关于C++ Map基于变量键返回类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23085433/