Oki
Продвинутый
- Сообщения
- 452
- Репутация
- 63
Оставляет желать лучшего.А что по поводу скорости работы с такими массивами?
Или я что-то не так делаю? Для теста скармливаю файл с текстовыми ключами, в котором порядка сотни миллионов строк длины порядка двух десятков символов, но лишь порядка шести сотен строк-ключей уникальны. Вот мой скрипт на AutoIt.
Код:
$sFileIn = @ScriptDir & "\keys.txt"
$hFileIn = FileOpen($sFileIn)
$oDict = ObjCreate("Scripting.Dictionary")
Do
$sText = FileReadLine($hFileIn)
$flagEOF = @error
If $flagEOF <> -1 Then
If $oDict.Exists($sText) Then
$oDict.Item($sText) += 1
Else
$oDict.Add($sText, 1)
EndIf
EndIf
Until $flagEOF = -1
$aKeys = $oDict.Keys()
For $i In $aKeys
ConsoleWrite($i & @TAB & $oDict.Item($i) & @CRLF)
Next
FileClose($hFileIn)
Код:
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
int main() {
ifstream in("keys.txt");
string str;
int count;
unordered_map<string, int> info;
unordered_map<string, int>::iterator iter;
while (!in.eof()) {
getline(in, str);
if ((str != "") || !in.eof()) {
iter = info.find(str);
if (iter == info.end()) {
info[str] = 1;
}
else {
info[str] += 1;
}
}
}
in.close();
for (auto x : info) {
cout << x.first << "\t" << x.second << "\n";
}
}