2011-01-14 4 views
0

Мне нужно подсчитать частоты разных целых чисел в двоичном файле, как я могу это сделать? Я не хочу, чтобы преобразовать в строку, потому что замедлит свою программу вниз .. Я думаю, что ...подсчет частоты целых чисел вместе взятых

vector<uint32_t> buf(2); 
map<uint32_t, uint32_t> mymap; 

if(file.is_open()) 
{ 
    while (file.read(reinterpret_cast<char*>(&buf[0]), sizeof(uint32_t)*numcols)) 
    { 
     for(size_t i = 0; i < numcols; ++i) 
     { 
      mymap[buf[i]]++; // **---> I need help here** 
     } 
    } 
} 
file.close(); 

Как я могу сделать ключ к карте, так что он всегда считает эти целые числа вместе

Yep .. сколько раз я вижу целые пары последовательно, например, сколько раз (1,2) или (8, 14) или (7,3).

1 2 
1 2 
7 3 
8 14 
8 14 
8 14 

1 2 --> 2 times 
7 3 --> 1 time 
8 14 --> 3 times 

numcols == 2 правильный.

+0

Я предполагаю, что 'numcols == 2'? – templatetypedef

+1

Кроме того, можете ли вы точно определить, что именно вы пытаетесь сделать? То есть, можете ли вы быть более ясными о том, что все эти объекты? – templatetypedef

+0

Вы хотите сказать, сколько раз вы видите каждую пару целых чисел подряд? Вы хотите совпадающие пары? То есть если файл содержит числа 1, 2, 3, 4, то вы также считаете пару (2, 3) или просто (1, 2) и (3, 4)? –

ответ

2

Один из вариантов может заключаться в использовании mappair<uint32_t, uint32_t> s в качестве ключей. Таким образом, вы явно сопоставляете пары uint32_t s с частотой, с которой они появляются.

+0

Что делать, если бы я хотел масштабировать это до триплетов, квадруплетов и т. Д. что-то вроде частот (1,2,3,4) и (3,8,7,1)? – Flethuseo

+0

Возможно, вы захотите изучить boost :: tuple как обобщение std :: pair. Он будет в новом стандарте C++, и если вы используете правильный компилятор, вы должны просто получить его бесплатно. – templatetypedef

Смежные вопросы