我使用OpenCV FileStorage将 map 存储在yaml文件中,如下所示:
cv::FileStorage fs("file.yaml.gz", cv::FileStorage::WRITE);
std::string somekey = ...;
double someval = ...;
fs << "mymap" << "{:" << somekey << someval << "}";
现在,我想取回数据,但是我不知道 map 的键。我猜代码应该是这样的:
cv::FileStorage fs("file.yaml.gz", cv::FileStorage::READ);
cv::FileNode fn = fs["mymap"];
// fn has type == cv::FileNode::MAP
// fn has size == 1 element (one pair)
// fn[0] returns also a MAP with 1 element
是否可以在没有密钥的情况下获取该映射的所有对?我已经检查了
cv::FileNodeIterator
,但似乎无法解决此问题。 C接口(interface)CvFileNode
允许检索值,但仅在提供密钥之后。 最佳答案
我通过@SchighSchagh找到了答案。
有必要使用cv::FileNodeIterator
遍历该节点,然后将其转换为cv::FileNode
。然后将密钥存储为此cv::FileNode
的名称:
cv::FileStorage fs("file.yaml.gz", cv::FileStorage::READ);
cv::FileNode fn = fs["mymap"];
for(cv::FileNodeIterator fit = fn.begin(); fit != fn.end(); ++fit)
{
cv::FileNode item = *fit;
std::string somekey = item.name();
double someval = (double)item;
...
}
重要的是要认识到
fit->name()
表示法不适用于cv::FileNodeIterator
。