我正在编写一段代码,将对象存储到 map<string, vector<T> >
中。该 map 迭代地填充数据,分析数据,然后在一个大循环中写入文件。在该循环之前,我打开文件以写出每列的内容,例如 # time var1 var2 var3
。问题是,我需要可靠地写 var1
, var2
,和var3
等等......在标题中,它们将以相同的顺序从 map 中检索。我现在使用一个丑陋的解决方法,带有 vector :
std::vector<std::string> header_names;
header_names.push_back("var1");
header_names.push_back("var2");
header_names.push_back("var3");
std::map<std::string, std::string> headers;
for(int i = 0; i < header_names.size(); i++) {
headers[header_names[i]] = header_names[i];
}
std::ofstream outputfile("out.txt");
outputfile << "# time ";
for(auto it = headers.begin(); it != headers.end(); ++it) {
outputfile << it->first << " ";
}
是否有更好的方法来达到相同的结果?
编辑:
使用@Claudiu的答案,我初始化 map ,然后清除 vector
s 是大循环开始时的值。
最佳答案
为什么不迭代 map 本身呢?这将保证您以与 map 本身相同的顺序检索它,因为它是 map 本身的顺序:
std::map<std::string, std::vector<T> > m = ...;
for (const auto& item : m)
{
outputfile << item.first << " ";
}
关于c++ - 在 C++ 中,如何以与从映射中检索值相同的顺序从 vector 中检索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29855526/