Browse Source

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.
tags/debian/1.1.9
Julian Andres Klode 6 years ago
parent
commit
e9185eca39
2 changed files with 7 additions and 7 deletions
  1. +2
    -2
      apt-pkg/pkgcachegen.cc
  2. +5
    -5
      apt-pkg/pkgcachegen.h

+ 2
- 2
apt-pkg/pkgcachegen.cc View File

@@ -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 View File

@@ -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;


Loading…
Cancel
Save