如何在 C++ 中创建“对象”(键值对)?

问题描述 投票:0回答:1

我正在使用 Arduino。我想做一个“物体”。我的意思是键值对(我习惯了 Javascript,所有 JS 程序员都知道我的意思)。基本上,我想在 C++ 中使用类似于 JSON 的东西。

我将向您展示如果我使用 JavaScript,我将如何解决我的问题:

const timeZones = {
    "London": 0,
    "Paris": 1,
    "Sydney": 10,
    "Los Angeles": -8
}

然后我可以访问这样的值:

let pst = timeZones["LosAngeles"] * 3600;

不过,我不确定如何在 C++ 中执行此操作。我到处找,只能找到关于结构体和二维数组的东西,这与我的问题无关。

我还发现了一些非常接近我需要的东西,但它是一个数组中的结构或类似的东西(例如

timeZones[3].time
会给我
-8
)。

抱歉,如果这是一个超级基本的问题,我三天前刚刚开始使用 Arduino。

arduino key-value
1个回答
0
投票

对于 Arduino,答案取决于您使用的开发板。

基于 ARM 的具有完整的 STL 支持,因此 map/unordered_map 可以工作。 只需添加 map 或 unordered_map 标头,您就可以像这样使用它。

#include <map>

std::map<std::string, int> timezones {
    { "London", 0 },
    { "Paris",  1 },
    { "Sydney", 10},
    {"Los Angeles", -8},
};

void loop() {
    Serial.println(timezones["London"]);
}

在基于 AVR 的(最古老的 Uno、nano、micro)上,没有内置的 STL 支持,但有一些实现,例如 ArduinoSTL 或 Arduino_AVRSTL 库,但由于

multiple definition of 'std::nothrow'
目前两者都无法链接,因此您必须修复或者以结构数组的方式实现您自己的实现并对其进行查找。

你还需要那个吗?有些常量可能比相对昂贵的字符串查找要好得多:

constexpr int TZ_LONDON = 0;
constexpr int TZ_PARIS  = 1;

...

    Serial.println(TZ_PARIS);
© www.soinside.com 2019 - 2024. All rights reserved.