2014-01-19 1 views
0

사용 후 몇 쌍 그룹화 I는 DB에이 형식 (요소 1 요소 2) = 빈번한 # 일부 쌍 즉 pairToCountmake_pair 사용 후 make_pair

을 얻었다 :

(1 2) = 1 
(1 3) = 1 
(1 4) = 1 
(2 3) = 2 
(2 4) = 3 
(2 5) = 1 
(3 4) = 2 
(5 4) = 1 

I 원할 각 번호 (1,2,3,4,5)에 대해 다음을 수행하십시오.

먼저 각 쌍의 번호가 1 ==>인지 확인한 후 빈도를 합산하십시오 (예 : ). 다음 쌍에 1이 있습니다. 1 2), (1 3), (1 4) ==> 빈도수 = 1 + 1 + 1 = 3

,

가 ==>도의 합계가 빈번한 인,,

2 4,5- (1 2)에, 2, 3 (2 5) (2 4) (2 3)을 동일하게 수행 = 1 + 2 + 3 + 1 = 7

3 (1 3) (2 3) (3 4)이다 ==>이 자주의 합 = 1 + 2 + 2 = 5

등등. 이것은 내가 작성한 코드입니다.

int sum = 0; 
    int found; 
    for (const auto& p1 : pairToCount) 
    { 
     int r = p1.first.first; 
     std::cout << " (" << r; 

     for (const auto& p2 : pairToCount) 
     { 
      if (r == p2.first.first) 
      { 
       sum += p2.second; 
       found = p2.first.second; 
      } 

      else if (r == p2.first.second) 
      { 
       sum += p2.second; 
       found = p2.first.first; 
      } 
      else 
       exit; 
      std::cout << "," << found ; 
     } 
     std::cout << ") = "<< sum << "\n "; 
     sum = 0; 
    } 

나는 마지막 요소와 더 쌍 4로 시작하지 있기 때문에, 코드는이 경우 작동하지 않습니다 + 동일한 테스트를 인쇄 중복을 얻었다.

이 결과는 :

(1,2,3,4,4,4,4,4,4) = 3 
(1,2,3,4,4,4,4,4,4) = 3 
(1,2,3,4,4,4,4,4,4) = 3 
(2,1,1,1,3,4,5,5,5) = 7 
(2,1,1,1,3,4,5,5,5) = 7 
(2,1,1,1,3,4,5,5,5) = 7 
(3,5,1,1,2,2,2,4,4) = 5 
(5,4,4,4,4,4,2,2,4) = 2 

난 그냥 make_pair를 배우고, 4 시간이 어느 예 또는 비슷한 질문이 나 있지만, 행운을 안내 할 수 있는지, 그것에 대해 읽기 보냈다!

답변

2

map (또는 C++ 11 또는 부스트가있는 경우 unordered_map)을 사용하면 많은 문제를 단순화 할 수 있습니다.

아이디어는 쌍/빈도 목록에서 한 번 반복하고 각 키의 부분 합계를지도에 저장하는 것입니다. 그런 다음 두 번째 루프에서 합계를 인쇄 할 수 있습니다.

#include <map> 

// ... 

std::map<int,int> sums; 
for (const auto& p1 : pairToCount) 
    sums[p1.first.first] += p1.second; 
    sums[p1.first.second] += p1.second; 
} 

for (const auto& k : sums) { 
    // print what you want 
} 
+0

감사합니다.이 코드는 똑똑해 보이지만 시각적으로는 stdio 2013/vC++을 사용하고 있습니다. 부스트와 C++ 11에 관한 소식을 처음 접한 이래로 몇 가지 관련 주제를 읽었습니다 (예 : http://stackoverflow.com/questions/17440810/how-do-i-build-boost-with-new -visual-studio-2013-preview/17440811 # 17440811), 그것은 나에게 복잡해 보입니다. – NHA

+0

실제로, 나는지도를 변경한다 [p1.first.first] + = p1.second; map [p1.first.second] + = p1.second; ** ** 합계 [p1.first.first] + = p1.second; 합계 [p1.first.second] + = p1.second; 작동합니다. 감사합니다. – NHA

+0

아, 오타. 미안합니다. – Mat

관련 문제