[问题] 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