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

看板C_and_CPP作者 (http://xth.tw)時間10年前 (2015/03/16 06:39), 編輯推噓8(8021)
留言29則, 10人參與, 最新討論串1/1
開發平台(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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.134.26.18 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1426487971.A.2CD.html

03/16 19:36, , 1F
應該是程序效率問題 vector.
03/16 19:36, 1F

03/16 23:21, , 2F
stringstream 極慢
03/16 23:21, 2F

03/16 23:32, , 3F
要快的話就自己寫parser + 用 mmap
03/16 23:32, 3F

03/16 23:33, , 4F
而且我看OneItem_TWU是用vector存kv pair和linear search
03/16 23:33, 4F

03/16 23:34, , 5F
最後再sort 為何不就直接用std::map呢?
03/16 23:34, 5F

03/17 09:00, , 6F
用Map是很好 但是我要對value做sort, 不能對key sort
03/17 09:00, 6F

03/17 09:15, , 7F
把pair丟進vector在sort, sort可以指定comparer
03/17 09:15, 7F

03/17 09:15, , 8F
就可以讓他比較value了
03/17 09:15, 8F

03/17 09:17, , 9F
不過sort是C++11滿落後的一塊 不支援lambda
03/17 09:17, 9F

03/17 09:25, , 10F
@@ 不支援!?
03/17 09:25, 10F

03/17 09:27, , 11F
我怎記得std::sort第三個參數可以塞lambda,還是我誤會了.
03/17 09:27, 11F

03/17 09:51, , 12F
誒 可以嗎!? 我怎麼還笨笨的做個struct給他operator<
03/17 09:51, 12F

03/17 09:52, , 13F
我也是做一個struct讓他operator的
03/17 09:52, 13F

03/17 09:52, , 14F
誒看了一下確定可以 是我沒catch到 拍寫 XD
03/17 09:52, 14F

03/17 09:53, , 15F
你把map iterator塞進vector 再sort 效能不錯的
03/17 09:53, 15F

03/17 09:55, , 16F
stringstream的問題好像比較大 但不知道怎解決orz
03/17 09:55, 16F

03/17 09:57, , 17F
不要用啊... 他跟lexical_cast吃的效能是同等級的
03/17 09:57, 17F

03/17 09:58, , 18F
不要依靠他去parse,自己parse一下。atoi/itoa
03/17 09:58, 18F

03/17 10:46, , 19F
我現在卡在fin進來是 string, 如何把many ints :int: many i
03/17 10:46, 19F

03/17 10:47, , 20F
切成vector<int> I:int tu: vector<int> U;
03/17 10:47, 20F

03/17 10:47, , 21F
先substr成前中後三段 再進行處理
03/17 10:47, 21F

03/17 11:05, , 22F
用string的find_first_of的找冒號應該沒有很難?
03/17 11:05, 22F

03/17 11:25, , 23F
找:的位置 -> 把:換成\0 ->對每個起點atoi
03/17 11:25, 23F

03/17 11:26, , 24F
atoi效能應該是上面那些東西的....500倍吧 profile看看
03/17 11:26, 24F

03/17 12:22, , 25F
std::stoi表示:
03/17 12:22, 25F

03/17 20:00, , 26F
@原 po , std::sort lambda , 可參考 #1H2iYSIt section6
03/17 20:00, 26F

03/20 15:03, , 27F
release?
03/20 15:03, 27F

03/20 15:41, , 28F
std::ios::sync_with_stdio(false);std::cin.tie(0);
03/20 15:41, 28F

03/20 18:25, , 29F
謝謝大家O_O
03/20 18:25, 29F
文章代碼(AID): #1L1dgZBD (C_and_CPP)