2013-04-17 73 views
-2

我試圖加載兩個文件,但我很難花時間輸入文件1文件2,並將它們放入一個有所有時間的列表中,但是如果時間已經輸入,則不會再次輸入它。從一個文件和另一個單獨的文件中獲取時間,並將兩個文件的時間值放入一個列表中C++

這不是作業。我只是自己開發一個應用程序項目。

- 我建立一個時間列表,將集合中的每個文件都放入一個集合中,然後加載已放入地圖的時間,以便只有一個列表,但我不知道從哪裏開始。如果這是有道理的?

+1

在file1和file2中顯示示例時間 – Vijay

+0

您使用的是哪個列表類? – user93353

+0

聽起來就像你可以使用'std :: set'這樣我可以給你一個通用的答案,但是如果你有一些代碼顯示你正在使用的類型以及你如何使用它,這將有所幫助。 –

回答

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值,您可以簡單地將時間字符串視爲鍵,並且如果鍵已經添加到映射容器中,再次插入 - 容器中保存的值將是最初的值。

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 
+0

你能告訴我一個如何做的例子,我仍然是一個初學者與地圖。如果你不介意,我不會完全理解它們。 – Cka91405

+0

@ Cka91405我做了一個編輯;希望它澄清這個過程。 – Rubens

0

如果時間值在文件排序,它可能是最好使用std::list<time>的任務。按排序順序將file1和file2中的值讀入不同的列表中,並按此順序使用list::mergelist::unique。這是因爲std::setstd::map都不保留它們存儲的值的順序。

您將需要使用list::push_back,list::mergelist::unique,並且每個文檔頁面都包含一個示例。

+0

有沒有這方面的例子?我從未使用過列表或設置過。謝謝 – Cka91405

+0

用一些鏈接更新了答案 – perreal

相關問題