bar*_*uti 6 c++ dictionary stdmap
我一直在搜索论坛和谷歌,很难理解如何做我想做的事。
我的示例基于您在选举中看到的典型数据集。我想分割一个分隔字符串并创建一个映射以供稍后访问 该字符串如下所示:“name=candidate1;vote=1000;percent=10.5”
我可以创建我的字符串映射,如下所示
while (getline(oss, key, '=') && getline(oss, value))
{
mCanData.insert(std::pair<std::string, std::string>(key, value));
}
Run Code Online (Sandbox Code Playgroud)
我想做的,我不知道这是否可能,是在地图中插入具有不同数据类型的值(iekey = "name" value = "candidate1", key = "vote" value =1000, key =“百分比”值=10.5)。我想要创建的映射将设置一个私有类变量,稍后其他类可以通过 getter 访问该变量。我无法使用 boost 库,所以请不要建议这样做。
任何帮助都会很棒,因为我现在迷路了。如果有更好的方法来解决这个问题,我也想知道。
如果您确实想将非结构化数据放入映射中,在 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"]);
}
Run Code Online (Sandbox Code Playgroud)
在wandbox上查看它的启动和运行情况。
它是否适合您主要取决于您是否可以使用 C++17。你没有具体说明,所以很难说。
话虽这么说,结构化数据(如 @rici 所建议的)看起来是解决问题的更好方法。
然而,我们既不能说真正的问题是什么,也不能说你是如何设计其余代码的,所以它可能也值得一提std::variant。
在 C++ 中std::map,所有值都具有相同的类型。
一般来说,当您拥有这样的结构化数据时,您需要定义一个结构化类型:
class Vote {
public:
std::string name;
int vote;
double percent;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7716 次 |
| 最近记录: |