布隆过滤器是一种空间效率高、适用于大规模数据集的概率性数据结构。它可以帮助快速判断一个元素是否可能存在于一个集合中,以及可能不存在于集合中(有一定的误判率)。
std::bitset<1000000>
来表示比特数组,但实际应用中可根据需求调整大小。hash1
、hash2
、hash3
)。这些哈希函数会将输入的元素映射到比特数组上的位置。通过多个哈希函数,可以减少冲突的可能性。布隆过滤器通常用于缓存、大规模数据处理和网络路由等领域,以快速定位哪些数据值得进一步详细检查。
下面是一个用 C++ 实现的简单布隆过滤器示例。请注意,这只是一个简单的演示,并不适用于生产环境。在实际情况下,您可能需要更多的错误检测和容错处理。
#include <bitset>
#include <functional>
class BloomFilter {
private:
std::bitset<1000000> bit_array; // 位数组大小为 1000000
std::hash<std::string> hash1;
std::hash<std::string> hash2;
std::hash<std::string> hash3;
public:
void add(const std::string& item) {
size_t hashVal1 = hash1(item) % 1000000;
size_t hashVal2 = hash2(item) % 1000000;
size_t hashVal3 = hash3(item) % 1000000;
bit_array[hashVal1] = 1;
bit_array[hashVal2] = 1;
bit_array[hashVal3] = 1;
}
bool possiblyContains(const std::string& item) {
size_t hashVal1 = hash1(item) % 1000000;
size_t hashVal2 = hash2(item) % 1000000;
size_t hashVal3 = hash3(item) % 1000000;
return bit_array[hashVal1] && bit_array[hashVal2] && bit_array[hashVal3];
}
};
int main() {
BloomFilter filter;
filter.add("apple");
filter.add("banana");
std::cout << filter.possiblyContains("apple") << std::endl; // 输出 1 (true)
std::cout << filter.possiblyContains("grape") << std::endl; // 输出 0 (false)
return 0;
}
该示例中使用了位集来表示布隆过滤器的位数组。您可以根据需求进行调整,比如更改位数组的大小、哈希函数等。