Google разреженный хэш замедляет отображение int на вектор

У меня есть карта uint64_t к вектору. Создание карты занимает необычно много времени (~ 70 с) по сравнению с unordered_map (~ 4 с) для строкового ввода размером 4 МБ. Аналогично, 120 с против 2400 с для строкового ввода размером ~ 150 МБ.

Unordered_map обычно быстрее разреженного хэша Google, но разница во времени огромна. Разреженный хеш примерно в 2 раза медленнее (чем неупорядоченная карта) для карты с int на int.

Я не понимаю причину этой разницы во времени.

Фрагмент кода:

int main(){
std::string input,reference;

while (getline(cin,input)) {
reference += input;
input.clear();
}

cout<<"length of reference = "<<reference.length()<<endl;

google::sparse_hash_map<uint64_t, vector<uint32_t>> m;
//unordered_map<uint64_t, vector<uint32_t>> m;
for (auto it = reference.begin(); it != reference.end(); it++) {
m[it-reference.begin()].push_back(it-reference.begin());
}
return 0;
}

Это результат / usr / bin / time в программе

length of reference = 4641652
Command being timed: "./a.out"User time (seconds): 76.06
System time (seconds): 0.31
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:16.43
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 308228
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 230585
Voluntary context switches: 1
Involuntary context switches: 2316
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]