使用自定义哈希函数对数组中的字符串进行分类

data structurec++server side programmingprogramming

在本文中,我们将深入研究一个涉及 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++ 编码技能并更好地理解数据分类和字符串操作技术。


相关文章