[英]C++ Map : Smart algorithm needed
我有3個檔案。 F1,F2,F3。 F1是具有200K條目的主文件。 F2和F3可以包含超集或條目的子集(300K或100K)。 我的目標是得出F1中不在F2和F3中的條目列表。 到目前為止,這就是我實施的方式。
有什么聰明,有效的方法嗎?
由於您在評論中說您的輸入已被排序,因此請完全避免使用容器:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream f1("f1.data"), f2("f2.data"), f3("f3.data");
string f1entry, f2entry, f3entry;
while ( getline(f1,f1entry) ) {
while ( f2 && f2entry < f1entry ) getline(f2,f2entry);
while ( f3 && f3entry < f1entry ) getline(f3,f3entry);
if ( f1entry != f2entry
&& f1entry != f3entry )
cout << f1entry << '\n';
}
}
我不知道你從哪里得出這個結論:
我的樹絕對不可能成為平衡的二叉樹。
但這是錯誤的。 您對std :: map的工作方式有奇怪的想法,並嘗試根據該想法過早地優化它。 因此,只需從地圖中刪除項目,然后從該地圖中的F2和F3中刪除元素后剩下的就是您所需要的。 如果標准地圖不夠快,請嘗試使用哈希地圖,也稱為unordered_map。
PS,應設置為unordered_set
為什么不同時閱讀F2和F3並將它們放在無序的集合中。
閱讀F1並吐出該集中未找到的那些項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.