Просмотр исходного кода

pkgcachegen: Use std::unordered_map instead of std::map

std::unordered_map is faster than std::map in our use case,
reducing cache generation time by about 10% in my benchmark.
Julian Andres Klode лет назад: 10
Родитель
Сommit
e9185eca39
2 измененных файлов с 7 добавлено и 7 удалено
  1. 2 2
      apt-pkg/pkgcachegen.cc
  2. 5 5
      apt-pkg/pkgcachegen.h

+ 2 - 2
apt-pkg/pkgcachegen.cc

@@ -1253,7 +1253,7 @@ map_stringitem_t pkgCacheGenerator::StoreString(enum StringType const type, cons
 {
    std::string const key(S, Size);
 
-   std::map<std::string,map_stringitem_t> * strings;
+   std::unordered_map<std::string,map_stringitem_t> * strings;
    switch(type) {
       case MIXED: strings = &strMixed; break;
       case PKGNAME: strings = &strPkgNames; break;
@@ -1262,7 +1262,7 @@ map_stringitem_t pkgCacheGenerator::StoreString(enum StringType const type, cons
       default: _error->Fatal("Unknown enum type used for string storage of '%s'", key.c_str()); return 0;
    }
 
-   std::map<std::string,map_stringitem_t>::const_iterator const item = strings->find(key);
+   std::unordered_map<std::string,map_stringitem_t>::const_iterator const item = strings->find(key);
    if (item != strings->end())
       return item->second;
 

+ 5 - 5
apt-pkg/pkgcachegen.h

@@ -26,7 +26,7 @@
 
 #include <vector>
 #include <string>
-#include <map>
+#include <unordered_map>
 
 class FileFd;
 class pkgSourceList;
@@ -41,10 +41,10 @@ class APT_HIDDEN pkgCacheGenerator					/*{{{*/
    APT_HIDDEN map_stringitem_t WriteStringInMap(const char *String, const unsigned long &Len);
    APT_HIDDEN map_pointer_t AllocateInMap(const unsigned long &size);
 
-   std::map<std::string,map_stringitem_t> strMixed;
-   std::map<std::string,map_stringitem_t> strSections;
-   std::map<std::string,map_stringitem_t> strPkgNames;
-   std::map<std::string,map_stringitem_t> strVersions;
+   std::unordered_map<std::string,map_stringitem_t> strMixed;
+   std::unordered_map<std::string,map_stringitem_t> strSections;
+   std::unordered_map<std::string,map_stringitem_t> strPkgNames;
+   std::unordered_map<std::string,map_stringitem_t> strVersions;
 
    friend class pkgCacheListParser;
    typedef pkgCacheListParser ListParser;