从一个文件和另一个单独的文件中抽出时间,并将两个文件中的时间值放入列表c ++中

时间:2013-04-17 11:45:15

标签: c++

我正在尝试加载两个文件,但是我很难花时间在文件1 文件2 中输入,并放置它们进入一直有所有时间的列表,但是如果已输入时间,则不再输入该时间。

这不适用于家庭作业。我只是自己编写一个应用程序项目。

- 我正在建立一个时间列表,它将每个文件放在一个集合中,然后加载已放入地图的时间,只有一个列表,但我不知道从哪里开始。如果这有意义吗?

2 个答案:

答案 0 :(得分:1)

只需读取文件,插入在(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值,你可以简单地获取时间字符串,将其视为密钥,并且,如果密钥已经添加到映射容器中,它不会再被插入 - 并且将保存在容器中的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

答案 1 :(得分:0)

如果时间值按文件排序,则最好使用std::list<time>执行任务。以排序顺序将file1和file2中的值读入不同的列表,并按此顺序使用list::mergelist::unique。这是因为std::setstd::map都不保留它们存储的值的顺序。

您需要使用list::push_backlist::mergelist::unique,每个文档页面都包含一个示例。