2011-01-14 17 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(); 

がどのように私はマップのキーを作ることができます...私は思う..文字列に変換したくありません

何度何回(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

1つのオプションはmapにキーとしてpair<uint32_t, uint32_t>を使用することです。そうすれば、あなたは明示的に、uint32_tのペアからそれらが出現する頻度にマッピングされます。

+0

これを3連、4連などに拡大したい場合はどうすればいいですか? (1,2,3,4)と(3,8,7,1)のような何か? – Flethuseo

+0

std :: pairの一般化としてboost :: tupleを調べるとよいでしょう。新しいC++標準になる予定です。正しいコンパイラを使用している場合は、無料で入手するだけです。 – templatetypedef

関連する問題