[英]Is there a Java Map keySet() equivalent for C++'s std::map?
[英]Why C++ STL map is slow Java' s map class?
我的輸入文件是 2GB,在這個文件中每一行都是一個詞。 我需要編寫一個程序來進行字數統計。 我用 Java 和 C++ 做同樣的任務,但結果令人驚訝:C++ 太慢了! 我的代碼如下:
C++:
int main() {
struct timespec ts, te;
double cost;
clock_gettime(CLOCK_REALTIME, &ts);
map<string, int> map;
ifstream fin("inputfile.txt");
string word;
while(getline(fin, word)) {
++map[word];
}
clock_gettime(CLOCK_REALTIME, &te);
cost = te.tv_sec - ts.tv_sec + (double)(te.tv_nsec-ts.tv_nsec)/NANO;
printf("cost: %-15.10f s\n", cost);
return 0;
}
輸出:成本:257.62 秒
爪哇:
public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
Map<String, Integer> map = new HashMap<String, Integer>();
FileReader reader = new FileReader("inputfile.txt");
BufferedReader br = new BufferedReader(reader);
String str = null;
while((str = br.readLine()) != null) {
Integer count = map.get(str);
map.put(str, count == null ? 1 : count + 1);
}
long endTime = System.currentTimeMillis();
System.out.println("cost : " + (endTime - startTime)/1000 + "s");
}
輸出:成本:124 秒
我把while里面的代碼刪掉了,只是讀取文件什么都不做,結果還是一樣。 Java 成本:32 秒,C++ 成本:38 秒。 這個差距我可以接受。 我的環境是 Ubuntu Linux 13.04,C++ 使用 -O2 優化。 為什么 STL 表現不佳?
C++std::map
是一種有序的數據結構,通常以樹的形式實現。 更公平的比較是在java.util.HashMap
和std::unordered_map
或java.util.TreeMap
和std::map
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.