Я храню карту в файле yaml с помощью OpenCV FileStorage, что-то вроде этого:
cv::FileStorage fs("file.yaml.gz", cv::FileStorage::WRITE);
std::string somekey = ...;
double someval = ...;
fs << "mymap" << "{:" << somekey << someval << "}";
Теперь я хочу получить данные обратно, но я не знаю ключей карты. Я думаю, код должен быть таким:
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, 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
,
Других решений пока нет …