使用自定義雜湊函式對陣列中的字串進行分類


在本文中,我們將深入探討一個有趣的涉及字串、雜湊和C++中分類的問題。問題陳述是“使用自定義雜湊函式對陣列中的字串進行分類”。這個問題提供了一個很好的機會來學習自定義雜湊函式、它們的用途以及它們在資料分類和字串操作中的應用。

問題陳述

給定一個字串陣列,任務是使用自定義雜湊函式將字串分類到不同的類別中。

自定義雜湊函式

雜湊函式是一個用於將任意大小的資料對映到固定大小的函式。在我們的例子中,我們將建立一個自定義雜湊函式來將字串對映到不同的類別。此函式將為每個字串生成一個唯一的雜湊值,然後我們將使用它進行分類。

C++解決方案方法

我們解決這個問題的方法是建立一個自定義雜湊函式,它將為每個字串返回一個唯一的值。然後,我們將使用此值對字串進行分類。

示例

以下是實現此解決方案的C++程式碼:

#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;

size_t customHash(string const& s) {
   size_t h = 0;
   for (char c : s) {
      h = h * 31 + c;
   }
   return h;
}

void classifyStrings(vector<string>& strings) {
   unordered_map<size_t, vector<string>> classes;
   for (string& s : strings) {
      size_t h = customHash(s);
      classes[h].push_back(s);
   }
   
   for (auto& kv : classes) {
      cout << "Class " << kv.first << ":\n";
      for (string& s : kv.second) {
         cout << "  " << s << '\n';
      }
   }
}

int main() {
   vector<string> strings = {"apple", "banana", "apple", "orange", "banana"};
   classifyStrings(strings);
   return 0;
}

輸出

Class 2898612069:
  banana
  banana
Class 3286115886:
  orange
Class 93029210:
  apple
  apple

帶測試用例的解釋

讓我們考慮一個字串陣列:{"apple", "banana", "apple", "orange", "banana"}。

當我們將此陣列傳遞給classifyStrings函式時,它使用自定義雜湊函式為每個不同的字串生成一個唯一的雜湊值。然後,它將具有相同雜湊值的字串組合在一起,有效地將它們分類到同一類中。

這表明“apple”和“banana”分別被分類到它們自己的類別中,因為它們在陣列中出現多次,而“orange”有它自己的類別。

結論

這個問題提供了一個很好的機會來理解自定義雜湊函式在C++中的概念和用法。這是一個提高你的C++編碼技能並更好地理解資料分類和字串操作技術的理想問題。

更新於:2023年5月17日

278 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.