我试图加载两个文件,但我很难花时间输入文件1和文件2,并将它们放入一个有所有时间的列表中,但是如果时间已经输入,则不会再次输入它。从一个文件和另一个单独的文件中获取时间,并将两个文件的时间值放入一个列表中C++
这不是作业。我只是自己开发一个应用程序项目。
- 我建立一个时间列表,将集合中的每个文件都放入一个集合中,然后加载已放入地图的时间,以便只有一个列表,但我不知道从哪里开始。如果这是有道理的?
我试图加载两个文件,但我很难花时间输入文件1和文件2,并将它们放入一个有所有时间的列表中,但是如果时间已经输入,则不会再次输入它。从一个文件和另一个单独的文件中获取时间,并将两个文件的时间值放入一个列表中C++
这不是作业。我只是自己开发一个应用程序项目。
- 我建立一个时间列表,将集合中的每个文件都放入一个集合中,然后加载已放入地图的时间,以便只有一个列表,但我不知道从哪里开始。如果这是有道理的?
只需读取文件,在(un)ordered_map
中插入读取的时间,并且如果要添加的条目已添加,请跳至下一个迭代。
#include <unordered_map>
std::unordered_map<std::string, VALUE_TYPE> hash;
while (read line) {
std::string date(extract_date(line));
auto it(hash.insert(std::make_pair(date, VALUE_TYPE())));
// If you want to check whether the last value has been inserted
if (it.second) {
// do something with the pair it.first
}
}
说明:
在map
,有序与否,你映射值,因此,为A
类型的每一个值,你可以节省B
类型的一些价值。
在这种情况下,一旦您必须为每个日期保存一些VALUE_TYPE
值,您可以简单地将时间字符串视为键,并且如果键已经添加到映射容器中,再次插入 - 容器中保存的值将是最初的值。
std::map<int, int> map;
map.insert(std::make_pair(1, 1));
map.insert(std::make_pair(2, 1));
map.insert(std::make_pair(1, 2));
map.insert(std::make_pair(2, 2));
for (auto it(map.begin()); it != map.end(); ++it) {
std::cout << it->first << " " << it->second << std::endl;
}
输出:
1 1
2 1
如果时间值在文件排序,它可能是最好使用std::list<time>
的任务。按排序顺序将file1和file2中的值读入不同的列表中,并按此顺序使用list::merge
和list::unique
。这是因为std::set
或std::map
都不保留它们存储的值的顺序。
您将需要使用list::push_back,list::merge和list::unique,并且每个文档页面都包含一个示例。
在file1和file2中显示示例时间 – Vijay
您使用的是哪个列表类? – user93353
听起来就像你可以使用'std :: set'这样我可以给你一个通用的答案,但是如果你有一些代码显示你正在使用的类型以及你如何使用它,这将有所帮助。 –