簡體   English   中英

為什么 C++ STL 映射是慢 Java 的映射類?

[英]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.HashMapstd::unordered_mapjava.util.TreeMapstd::map

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM