[問題] C++ 開檔案就是慢? 還是處理程序問題?

作者: xthe (Semicolon Kang)   2015-03-16 14:39:28
開發平台(Platform): Visual Studio 2013 C++ Express
額外使用到的函數庫(Library Used): C++ STL
問題(Question):
開啟檔案速度過慢,別人的版本(JAVA只要10秒左右),我的要60秒
餵入的資料(Input):1M Transaction(一百萬筆交易)
Transaction Format為 I_1 I_2 .... I_N:value:U_1 U_2 ... U_N
U_k分別對應每個I_k, value是整個交易的U總和(已經計算好)
預期的正確結果(Expected Output):執行時間希望能縮短
程式碼(Code): http://pastebin.com/iLq0BN8Q
作者: micola (Logical way)   2015-03-16 19:36:00
應該是程序效率問題 vector.
作者: CaptainH (Cannon)   2015-03-16 23:21:00
stringstream 極慢
作者: PkmX (阿貓)   2015-03-16 23:32:00
要快的話就自己寫parser + 用 mmap而且我看OneItem_TWU是用vector存kv pair和linear search最後再sort 為何不就直接用std::map呢?
作者: xthe (Semicolon Kang)   2015-03-17 09:00:00
用Map是很好 但是我要對value做sort, 不能對key sort
作者: Killercat (殺人貓™)   2015-03-17 09:15:00
把pair丟進vector在sort, sort可以指定comparer就可以讓他比較value了不過sort是C++11滿落後的一塊 不支援lambda
作者: bibo9901 (function(){})()   2015-03-17 09:25:00
@@ 不支援!?
作者: EdisonX (卡卡獸)   2015-03-17 09:27:00
我怎記得std::sort第三個參數可以塞lambda,還是我誤會了.
作者: Killercat (殺人貓™)   2015-03-17 09:51:00
誒 可以嗎!? 我怎麼還笨笨的做個struct給他operator<
作者: xthe (Semicolon Kang)   2015-03-17 09:52:00
我也是做一個struct讓他operator的
作者: Killercat (殺人貓™)   2015-03-17 09:52:00
誒看了一下確定可以 是我沒catch到 拍寫 XD你把map iterator塞進vector 再sort 效能不錯的
作者: xthe (Semicolon Kang)   2015-03-17 09:55:00
stringstream的問題好像比較大 但不知道怎解決orz
作者: Killercat (殺人貓™)   2015-03-17 09:57:00
不要用啊... 他跟lexical_cast吃的效能是同等級的不要依靠他去parse,自己parse一下。atoi/itoa
作者: xthe (Semicolon Kang)   2015-03-17 10:46:00
我現在卡在fin進來是 string, 如何把many ints :int: many i切成vector<int> I:int tu: vector<int> U;先substr成前中後三段 再進行處理
作者: BlazarArc (Midnight Sun)   2015-03-17 11:05:00
用string的find_first_of的找冒號應該沒有很難?
作者: Killercat (殺人貓™)   2015-03-17 11:25:00
找:的位置 -> 把:換成\0 ->對每個起點atoiatoi效能應該是上面那些東西的....500倍吧 profile看看
作者: PkmX (阿貓)   2015-03-17 12:22:00
std::stoi表示:
作者: EdisonX (卡卡獸)   2015-03-17 20:00:00
@原 po , std::sort lambda , 可參考 #1H2iYSIt section6
作者: longlongint (華哥爾)   2015-03-20 15:03:00
release?
作者: ibmibmibm (BestSteve)   2015-03-20 15:41:00
std::ios::sync_with_stdio(false);std::cin.tie(0);
作者: xthe (Semicolon Kang)   2015-03-20 18:25:00
謝謝大家O_O

Links booklink

Contact Us: admin [ a t ] ucptt.com