721のアカウントを統合(互いに素セット/検索深い/ワイド検索)

効果の対象とは:同じニックネームは、同じ人ではないかもしれないが、それは同じ人かもしれないが、別のニックネームは確かにイタリアがリンクされ、同じ個人のメールアドレスに従うことと同じ人物ではありません。

 

互いに素セット:

  対応する互いに素-集合演算のE-mailアドレス、電子メールアドレス交差点が存在している場合には、二つのリストは、それらを一緒に接続するには、確かに同じ人に起因するものです。

1  クラスソリューション{
 2  公共3      int型の検索(INT IDR、ベクトル< INT >&U){
 4          ながら(!IDR = U [IDR])IDR = U [IDR]。
5          リターンIDR。
6      }
 7      ボイド(参加INT IDR1、INT IDR2、ベクトル< INT >&U){
 8          INT F1 = (IDR1、U)を見つけます
9          INT F2 = (IDR2、U)を見つけます。
10          U [F2] = F1。
11      }
12      マップ< 文字列int型 > hashmap1。
13      地図< INT、ベクトル<ベクトル< ストリング >>> hashmap2。
14      ベクトル<ベクトル< 文字列 >> RES。// 返回向量
15      ベクトル<ベクトル< ストリング >> accountsMerge(ベクトル<ベクトル< ストリング >>&アカウント){
 16          ベクター< 整数 > U(accounts.size())。 
17          のためにINT iが= 0 ; I <u.sizeは(); iが++)U [I] = I。
         int型 K = 0 ; K <accounts.size(); K ++){ // 論理接続を見つける
19。             ためのINT I = 1 ; I <アカウント[K] .size(); I ++ ){
 20が                  自動ADDR =をアカウント[K] [I];
 21である                  自動ITER = hashmap1.find(ADDR)、
 22は                 IF(ITERのhashmap1.end ==())hashmap1 [ADDR] = K;
 23である                 (hashmap1 [ADDR]、Kに参加し、U );
 24              }
 25          }
 26は、 
27          // プリント互いに素なセットケース
 28          @以下のために(INT I 0 =; I <u.size(); I ++){
 29          //     COUT << U [I] << "「。
30          //     用(自動ヴァル:アカウント[i])とはcout <<ヴァル<< "「;
31          //     coutの<<てendl;
32          // } 
33  
34          のためにINT iは= 0 ; I <accounts.size(); I ++){ // 物理连接
35              のint F =(U [i]は、U)を求めます。// 对顶层节点进行分类
36              自動ITER = hashmap2.find(F)。
37              であれば(ITER == hashmap2。
{};
39              }
 40              hashmap2 .push_back [F](アカウント[I])。
41          }
 42          のための(自動ITER = hashmap2.begin();!ITER = hashmap2.end(); ITER ++ ){
 43              セット < ストリング > マップ。
44              のための(自動リスト:iter-は> 秒){
 45                  のためにINT iが= 1 ; I <はlist.size(); I ++ ){
 46                      ヴァル= リスト[i]は、
47                      自動ITR = map.find(ヴァル)。
48                      もし ITR(==map.end())map.insert(ヴァル)
49                  }
 50              }
 51              場合(map.empty())続けます52              ベクター< ストリング > TEMP(map.begin()、map.end())。
53              ソート(temp.begin()、temp.end())。
54              temp.insert(temp.begin()、アカウント[iter->最初] [ 0 ])。
55              res.push_back(TEMP)。
56          }
 57          リターンRES。
58      }
 59 }。

 

 

 

おすすめ

転載: www.cnblogs.com/NiBosS/p/12032136.html