问题描述
我下面显示了一个哈希表程序
AnalyticsService,{ provide: COLLECTION_ENABLED,useValue: true },{ provide: DEBUG_MODE,useValue: !environment.production },{
provide: APP_NAME,useFactory: (config: IConfig) => config.name + '-' + config.instance,deps: [APP_CONFIG]
},{
provide: APP_VERSION,useFactory: (config: IConfig) => config.version,{
provide: CONFIG,useValue: {
send_page_view: true,allow_ad_personalization_signals: false,anonymize_ip: true
}
},ScreenTrackingService,UserTrackingService
但是,我需要从结果中获得一些具体信息,但我不确定如何找到。这是2个输出
- 哈希表中空元素的数量
- 最长链的长度
我尝试用我的#include<bits/stdc++.h>
#include <algorithm>
std::string fileName;
std::fstream readFile;
const int arraySize = 100;
int storeFile[arraySize];
class Hash
{
std::list<int> *table;
std::list<int>::iterator anItetator;
public:
int count = 0;
int mod = 100;
Hash();
Hash(int Value);
void insertItem(int key);
int hashFunction(int key) {
return (key % mod);
}
void loopHash();
void displayHash();
};
Hash::Hash(){
}
Hash::Hash(int b)
{
this->mod = b;
table = new std::list<int>[mod];
}
void Hash::insertItem(int key)
{
int index = hashFunction(key);
table[index].push_back(key);
}
void Hash::displayHash() {
for (int i = 0; i < mod; i++) {
std::cout << i;
for (auto x : table[i])
std::cout << " --> " << x;
std::cout << std::endl;
}
}
void Hash::loopHash() {
for(anItetator = table->begin(); anItetator != table->end(); ++anItetator){
if(table->empty()==true) {
count++;
}
std::cout << "Total number of empty entries is: " << count;
std::cout << "The largest chain is: " << *std::max_element(table->begin(),table->end());
}
}
int main(int argc,char *argv[])
{
int n = arraySize;
Hash h(h.mod);
std::cout << "Please enter the name of the file: " << std::endl;
std::cin >> argv[0];
fileName = argv[0];
std::cout << "Attempting to read file " << fileName << std::endl;
readFile.open(fileName);
for(int i = 0; i < n; i++) {
while (readFile >> storeFile[i])
{
h.insertItem(storeFile[i]);
}
}
//h.displayHash();
h.loopHash();
readFile.close();
return 0;
}
做类似的事情,但是此函数不打印任何值。
如果任何人都知道哈希表,并且可以帮助我,那就太好了。
解决方法
for(anItetator = table->begin(); anItetator != table->end(); ++anItetator){
遍历第一个std::list
中的元素,因为table
是指向list<>
的指针(但是list
应该指向第一个mod
个这样的列表中的一个有效地组成了list
个数组)。
要检查哈希表中的每个存储区,您需要做的是将访问table
作为数组,使用您称为new
的数组长度来分配内存;例如
int num_empty_buckets = 0;
int longest_chain = 0;
for (int index = 0; index < mod; ++index) {
if (table[index].empty())
++num_empty_buckets;
longest_chain = std::max(table[index].size(),longest_chain);
}
// print 'em...