]> git.saurik.com Git - apt.git/commitdiff
pkgcachegen: Use std::unordered_map instead of std::map
authorJulian Andres Klode <jak@debian.org>
Sun, 27 Dec 2015 00:33:38 +0000 (01:33 +0100)
committerJulian Andres Klode <jak@debian.org>
Sun, 27 Dec 2015 00:46:06 +0000 (01:46 +0100)
std::unordered_map is faster than std::map in our use case,
reducing cache generation time by about 10% in my benchmark.

apt-pkg/pkgcachegen.cc
apt-pkg/pkgcachegen.h

index 61f7a1124a5f72c426aa6efcc495bd57604633e1..e7bdc615b886efdb8c313b619b8640a4234fc103 100644 (file)
@@ -1253,7 +1253,7 @@ map_stringitem_t pkgCacheGenerator::StoreString(enum StringType const type, cons
 {
    std::string const key(S, Size);
 
 {
    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;
    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;
    }
 
       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;
 
    if (item != strings->end())
       return item->second;
 
index 328d296bf823973c9eafeba4c19d762fdbe9af78..9001e334f868002e2385c6b0329c795c1e788bd8 100644 (file)
@@ -26,7 +26,7 @@
 
 #include <vector>
 #include <string>
 
 #include <vector>
 #include <string>
-#include <map>
+#include <unordered_map>
 
 class FileFd;
 class pkgSourceList;
 
 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);
 
    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;
 
    friend class pkgCacheListParser;
    typedef pkgCacheListParser ListParser;