gpt4 book ai didi

c++ - std::map 具有不同数据类型的值

转载 作者:太空狗 更新时间:2023-10-29 20:20:51 33 4
gpt4 key购买 nike

我一直在搜索论坛和谷歌,但很难理解我如何才能做我想做的事。

我的示例基于您在选举中看到的典型数据集。我想拆分一个分隔字符串并创建一个映射以供以后访问该字符串如下所示:"name=candidate1;vote=1000;percent=10.5"

我可以按如下方式创建我的字符串映射

    while (getline(oss, key, '=') && getline(oss, value))
{

mCanData.insert(std::pair<std::string, std::string>(key, value));

}

我想做的,但我不知道这是否可行,是在 map 中插入具有不同数据类型的值(即 key = "name"value ="candidate1", key = "vote"value =1000,键=“百分比”值=10.5)。我要创建的 map 将设置一个私有(private)类变量,稍后其他类可以通过 getter 访问该变量。我无法使用 boost 库,所以请不要建议。

任何帮助都会很棒,因为我现在迷路了。如果有更好的方法来解决这个问题,我也想知道。

最佳答案

如果你真的想把非结构化数据放在你的 map 中,在 C++17 中你可以使用 std::variant 来做到这一点,然后访问它以取回您的数据。
它遵循一个最小的工作示例:

#include <variant>
#include <string>
#include <map>
#include <iostream>

int main() {
std::map<std::string, std::variant<std::string, int, double>> mm;
mm["name"] = "candidate1";
mm["vote"] = 1000;
mm["percent"] = 10.5;

auto visitor = [](auto data){ std::cout << data << std::endl; };
std::visit(visitor, mm["name"]);
std::visit(visitor, mm["vote"]);
std::visit(visitor, mm["percent"]);
}

wandbox 上查看它的启动和运行情况.
它是否适合你主要取决于你是否可以使用 C++17。你没有指定它,所以很难说。


话虽这么说,结构化数据 ( as suggested by @rici ) 看起来是解决问题的好方法。
然而,我们既不能说真正的问题是什么,也不能说您是如何设计其余代码的,因此值得一提的可能还有 std::variant

关于c++ - std::map 具有不同数据类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47404870/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com