`
guoyiqi
  • 浏览: 1010619 次
社区版块
存档分类
最新评论

C++程序代写实现HashSet class

 
阅读更多

C++程序代写实现HashSet class

专业程序代写(QQ:928900200)

Implement a HashSet class for elements of type string.
It has the following functions: 
bool add(const string &)
bool contains(const string &) const
int size() const
In this exercise, you need to implement some of the above functions, as well as several internal functoins: 
int find(const string & e) const
void resize(int capacity2)
bool contains(const string & e) const
Hint:
The function find(e) finds the first position starting from p=h%N, which is either empty or equal to e. That is, find(e) should look like the following: 
int find(const string & e) const {
int p = hashIndex(e);
while (true) {
if (…) return p;
p = (p + 1) % capacity;
}
}
EXAMPLE INPUT 
apple
orange
banana
apple
orange

apple
watermelonEXAMPLE OUTPUT 
3
true
false


主程序 

#include <iostream> 
#include <string> 
using namespace std; 

////////////////////////// 
// Interfaces 
// 

template <typename E> 
class Set 
{ 
public: 
virtual bool add(const E &) = 0; 
virtual bool contains(const E &) const = 0; 
virtual int size() const = 0; 
}; 

template <typename E> 
class HashFunction 
{ 
public: 
virtual int getHashCode(const E & e) const = 0; 
}; 

///////////////////////// 
// hash-function 
// 

class StringHashFunction : public HashFunction<string> 
{ 
public: 
int getHashCode(const string & text) const { 
int code = 0; 
for (int i = 0; i < text.size(); ++ i) { 
int code1 = text[i]; 
code1 = code1 « (i * 8 % 24); 
code = code ^ code1; 
} 
return code; 
} 
}; 

///////////////////////// 
// your class 
// 

class HashSet : public Set<string> 
{ 
private: 

const StringHashFunction hashFunction; 

class Entry 
{ 
public: 
string element; 
bool isInUse; 

Entry() { 
isInUse = false; 
} 
}; 

Entry * entries; 

int capacity; 
int count; 

void initialize(int capacity2) { 
count = 0; 
capacity = capacity2; 
entries = new Entry[capacity]; 
} 

void assign(const HashSet & set2) { 
count = set2.count; 
capacity = set2.capacity; 
entries = new Entry[capacity]; 
for (int i = 0; i < capacity; ++ i) { 
entries[i] = set2.entries[i]; 
} 
} 

public: 

HashSet() { 
initialize(2); 
} 

~HashSet() { 
delete [] entries; 
} 

HashSet(const HashSet & set2) { 
assign(set2); 
} 

HashSet & operator = (const HashSet & set2) { 
delete [] entries; 
assign(set2); 
return (*this); 
} 

private: 

int hashIndex(const string & e) const { 
int hashCode = hashFunction.getHashCode(e); 
return hashCode % capacity; 
} 

int find(const string & e) const; 

void resize(int capacity2); 

public: 

bool add(const string & e) { 
int index = find(e); 
if (entries[index].isInUse) { 
return false; 
} 
entries[index].element = e; 
entries[index].isInUse = true; 
++ count; 
if (count > capacity / 2) { 
resize(capacity * 2); 
} 
return true; 
} 

bool contains(const string & e) const; 

int size() const { 
return count; 
} 

}; 

#include “source” 

int main() { 
HashSet set; 
for (int i = 0; i < 5; ++ i) { 
string text; 
cin » text; 
set.add(text); 
} 
cout « set.size() « endl; 
for (int i = 0; i < 2; ++ i) { 
string text; 
cin » text; 
if (set.contains(text)) { 
cout « “true” « endl; 
} 
else { 
cout « “false” « endl; 
} 
} 

} 

分享到:
评论

相关推荐

    c++用vector实现HashSet

    虽然C++标准库中没有直接提供HashSet类,但我们可以利用其他容器,如`std::unordered_set`来实现类似的功能。不过,在这个场景中,我们将探讨如何使用`std::vector`来模拟HashSet的行为。 `std::vector`是C++标准库...

    hashset类的使用

    上面的示例程序创建了一个HashSet对象,并通过add方法添加了几个字符串元素。然后使用contains方法检查HashSet中是否包含特定字符串。我们还演示了remove方法来删除一个元素,使用size方法获取了HashSet中元素的数量...

    HashSet的实现原理

    在Java编程中,HashSet是一种不允许存储重复元素的集合,它实现了Set接口。HashSet是通过HashMap来实现的,其底层使用HashMap来保存所有元素。这种实现方式让HashSet的操作非常简单高效,因为HashSet的大部分操作,...

    hash_set c++总结(自定义类型struct、class)

    hash_set c++总结(自定义类型stuct、class)。总结自定义struct、class三个案例。find函数测试,hash_set迭代器。

    HashSet去重

    - **`HashSet`与`ArraySet`/`LinkedSet`**:`HashSet`是基于哈希表实现的,而`ArraySet`通常是指数组实现的集合,`LinkedSet`则是基于链表实现的有序集合。`HashSet`提供了非常高效的增删查操作,但不保证元素的插入...

    Class005_HashSet.java

    Class005_HashSet.java

    cpp-sparsemap一个高效hashmap和hashset的C实现

    本文将深入探讨一种名为cpp-sparsemap的实现,它是一个高效且轻量级的哈希映射(HashMap)和哈希集合(HashSet)的C++实现,主要由Tessil团队开发,并存储于Tessil-sparse-map-162cc7b版本的代码库中。 cpp-...

    HashSet详解和使用示例_动力节点Java学院整理

    HashSet是Java编程语言中的一种集合类,它是一个不包含重复元素的集合,其内部实现基于HashMap。HashSet不保证元素的顺序,允许存储null元素,并且是非同步的,这意味着在多线程环境下,如果需要保证线程安全,需要...

    HashSet类的用法.pdf

    `HashSet`是Java集合框架的一部分,它实现了`Set`接口。`HashSet`不允许重复的元素,并且不保证元素的顺序。此外,`HashSet`是非同步的,这意味着多线程环境下的安全问题需要通过外部同步机制解决。 #### 二、特点 ...

    源码解析jdk7.0集合:HashSet的底层实现原理.pdf

    HashSet作为Java集合框架中一个重要的非同步集合实现,它在JDK 7.0中的底层实现原理是基于HashMap来存储和操作数据的。下面就详细介绍HashSet的实现原理。 首先,HashSet是Set接口的一个实现类,它用于存储唯一性的...

    HashSet工作原理_动力节点Java学院整理

    对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:

    treemap treeset hashset hashmap 简要介绍

    `HashSet`是基于哈希表实现的Set(集合)实现,它不保证集合中元素的任何特定顺序。`HashSet`允许快速添加、删除和查找元素,但不能包含重复的元素。为了正确地工作,`HashSet`要求元素具有良好的`equals()`和`...

    HashMap与HashTable和HashSet的区别

    在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程需求。本文将重点分析这三种数据结构之间的区别,特别是针对...

    HashSet和TreeSet_围墙之外

    HashSet和TreeSet是Java集合框架中的两种重要数据结构,它们都是Set接口的实现类,用于存储不重复的元素。在编程实践中,理解它们的区别和应用场景至关重要。 HashSet是基于HashMap实现的,它不保证元素的顺序,...

    JAVA反射机制-Class类-Class对象的获取.pdf

    这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口信息的能力。本文将详细介绍如何获取`Class`对象的不同方法及其应用场景。 #### Class类简介 `java.lang.Class`是一个特殊的类,它用来封装已经被...

    Java面试题 从源码角度分析HashSet实现原理

    5. HashSet的实现机理:HashSet的实现机理可以总结为:HashSet是基于HashMap实现的,HashSet的元素不重复机制是通过HashMap的put方法实现的,HashSet的其他方法都是通过调用HashMap的对应方法来实现的。 通过源码...

    排序之HashSet和TreeSet的区别

    在Java编程语言中,集合框架是处理数据的重要组成部分,其中`HashSet`和`TreeSet`是两种常用的Set接口实现类。它们各自具有独特的特性和用途,理解它们的区别对于编写高效且正确的代码至关重要。 首先,`HashSet`是...

    java 利用HashSet删除学生

    在Java编程中,HashSet是一个非常重要的集合类,它继承自AbstractSet并实现了Set接口。HashSet不包含重复元素,也不保持元素的顺序。本篇将详细讲解如何利用Java的HashSet类来删除学生对象,以及HashSet的一些核心...

    由HashSet谈重用

    public class HashSet&lt;E&gt; extends AbstractSet&lt;E&gt; implements Set, Cloneable, java.io.Serializable { private transient HashMap, Object&gt; map; private static final Object PRESENT = new Object(); public...

    java HashSet 集合排序

    java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。

Global site tag (gtag.js) - Google Analytics