从文本文件加载标准::映射

load std::map from text file

本文关键字:映射 标准 加载 文本 文件      更新时间:2023-10-16
这是

一件非常简单的事情,所以我想让它听起来很简单。我想要的只是从文件中加载一堆键值对,并将它们填充到映射中。我真的不在乎文本的结构如何,只要它易于阅读。

我现在拥有的是:

  • 带有 XSD 生成的代码的 XML(矫枉过正)
  • 协议缓冲区(也矫枉过正)
  • INI 样式文本文件

我喜欢 INI 文件的语法,但我不想为此编写解析器。在我看来,我会做很多人在我之前做过的事情。难道没有某种库可以读取这样的简单结构化文件吗?

由于您似乎想要人类可能最简单的东西,因此我将根据您的地图内容建议一些非常简单的东西,这些方法可能会也可能不会起作用。 如果地图数据值是包含空格的字符串,则此操作不起作用。 如果它们是没有空格或数字的字符串,则您已设置。

这不是经过测试的代码,但它既接近又简单,所以即使它没有完全编译,你也应该没问题。 只需将 KeyType 和 ValueType 更改为 int、string、float 或您在文件中实际使用的任何内容即可。

设置文件如下:

key value
key2 value2
key3 value3
key4 value4

读起来像:

KeyType key;
ValueType value;
std::map<KeyType, ValueType> myMap;
while (infile >> key >> value)
    myMap[key] = value;

如果你在MS的世界里,你可以使用

GetPrivateProfileSectionNames
GetPrivateProfileString
WritePrivateProfileString

从 INI 文件或注册表读取。如果要编写 Unicode,请确保新创建的文件获得 UTF16 的 BOM。