C++ Map基于变量键返回类对象

标签 c++ dictionary

我重新学习了 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/

相关文章:

c++ - 在C++上接收 “Error: expected an identifier”的 “==”

python - 带有嵌套列表的字典理解,防止覆盖

c++ - friend ,抽象类和工厂模式

C++ 为什么要隐式调用转换器构造函数?

Python 3 : Flatten Dictionary including lists

Java 获取嵌套的 JSON 对象/数组

ios - 在 Swift 中访问 userInfo 字典

c++ - 在 C++ 中使用 map 而不是 array 来保护在数组边界之外的搜索?

c++ - 从函数返回数组

c++ - 如何以最快的方式检查给定的数字是否可以被 15 整除?