如何在yaml cpp中保持插入顺序
How to preserve inserting order in yaml cpp
我创建了一个包含键和值作为字符串的yamlmap,我已将其保存到文本文件。在加载相同的文本文件时,包含字符串的键将按yaml自动排序。现在我想加载字符串名称在相同的顺序,我如何保存。为了解决问题,我必须在函数savessettings()和loadSettings中做些什么。由于
std::vector<SettingsPair*> settingsvector;std::list<std::string> settings_list;
class SettingsPair
{
public:
/**
* @brief standard constructor
*/
SettingsPair();
SettingsPair(QLineEdit *le, QLabel *la);
~SettingsPair();
QLineEdit* line_edit;
QLabel* label;
};
void task1::saveSettings()
{
QString filename = QFileDialog::getSaveFileName(this,
tr("save YAML File "),"C:/Users/marthala/Desktop/ws/settingstask","ALL files(*.*);;YAML File(*.yaml)");
std::ofstream ofstr;
std::string file= filename.toStdString();
YAML::Emitter out;
ofstr.open(file.c_str());
out << YAML::BeginMap;
for(std::vector<SettingsPair*>::iterator list_iter = settingsvector.begin();
list_iter != settingsvector.end(); list_iter++)
{
QString key_lineedit = (*list_iter)->line_edit->text();
QString key_label = (*list_iter)->label->text();
out << YAML::Key << key_label.toStdString();
out << YAML::Value <<key_lineedit.toStdString();
}
ofstr<<out.c_str();
out << YAML::EndMap;
std::cout<<"here is the output while saving the file:n"<<out.c_str() ;
ofstr.close();
}
void task1::loadSettings()
{
QString filename = QFileDialog::getOpenFileName(this,
tr("Open File"),"C:/Users/marthala/Desktop/ws/settingstask","ALL files(*.*);;YAML File(*.yaml)");
//getOpenFileName will retuns the file path of the file selected
if(filename.isEmpty())
{
return;
}
else
{
try
{
std::ifstream fin(filename.toStdString().c_str());
YAML::Parser parser(fin);
YAML::Node doc;
while(parser.GetNextDocument(doc))
{
std::vector<SettingsPair*>::iterator list_iter = settingsvector.begin();
if(list_iter != settingsvector.end())
{
std::string key_, value_;
for(YAML::Iterator it=doc.begin();it!=doc.end();++it)
{
it.first() >> key_;
it.second() >> value_;
QString str1 = QString::fromUtf8(key_.c_str());
QString str2 = QString::fromUtf8(value_.c_str());
(*list_iter)->label->setText(str1);
(*list_iter)->line_edit->setText(str2);
list_iter++;
std::cout<<"here is the output while loading the file:n"<< key_<<":n"<<value_;
}
}
}
}
catch(YAML::ParserException &e)
{
std::cout<<"YAML Exception caught"<<e.what()<<std::endl;
}
}
}
此功能目前正在考虑中。
需要yaml-cpp版本0.6或更高
https://github.com/jbeder/yaml-cpp/commit/f0b15cd6a0d61f5b2dbc317263c02f91a7e3692c相关文章:
- 如何按数字顺序插入链表节点?
- 二叉树级别顺序插入 c++
- 按相反顺序插入矢量
- C++ 双向链表 - 插入同时保持递增顺序
- 在插入顺序已知时填充 Eigen3 稀疏矩阵的策略
- 如何修改函数以按C++的排序顺序插入每个项目
- 链接列表并按字母顺序插入字符串
- 按排序顺序将节点插入链表
- 在std ::或std :: unordered_set上保存插入顺序
- Unordered_set如何确定C 中的插入顺序
- 通过索引快速搜索,并将插入顺序保持在C 中
- 在STD :: MultiSet中维护插入顺序
- c++设置了保持插入顺序的数据结构
- 如何按插入顺序从映射中检索元素
- 我读了map.erase(map.end());删除地图的最后一个元素。但是最后一个元素是什么?它是否基于元素的插入顺序?
- 插入顺序std::map
- c++标准库是否有按插入顺序排序的集合
- 如何在yaml cpp中保持插入顺序
- STL容器,保留插入顺序,但不允许重复
- Q图形项目插入顺序