2011-01-14 7 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 correct.

+0

나는'numcols == 2'라고 가정합니까? – templatetypedef

+1

또한, 당신이하려고하는 것이 무엇인지 명확히 할 수 있습니까? 즉,이 모든 객체가 무엇인지 조금 더 명확히 할 수 있습니까? – templatetypedef

+0

정수의 각 쌍을 연속적으로 몇 번 보았는지를 세고 싶습니까? 겹치는 짝을 원하니? 나는. 파일에 숫자 1, 2, 3, 4가 포함되어 있으면 쌍 (2, 3) 또는 그냥 (1, 2) 및 (3, 4)를 계산하고 있습니까? –

답변

2

하나의 옵션으로 mappair<uint32_t, uint32_t>을 키로 사용할 수 있습니다. 그렇게하면 uint32_t 쌍에서 명시된 빈도로 명시 적으로 매핑됩니다.

+0

만약 이것을 세 쌍둥이나 네 쌍둥이 등으로 확장하고 싶다면 ... (1,2,3,4)와 (3,8,7,1)의 주파수 같은 것이 있습니까? – Flethuseo

+0

std :: pair의 일반화로서 boost :: tuple을 살펴볼 수 있습니다. 새로운 C++ 표준이 될 것입니다. 올바른 컴파일러를 사용한다면 무료로 받아 들여야합니다. – templatetypedef