有一小段代码我遇到了麻烦。到目前为止,我已经设置了一个程序,它可以读取 words.txt,然后计算每个单词。当我计算它时,我需要一个哈希函数,它只会通过二次碰撞方案对每个单词进行一次哈希处理,并允许我将它存储在一个表中。
问问题
338 次
2 回答
2
std::hash
使用的标准散列函数std::unordered_map
非常好。如果你发现你需要一些不同的东西,你当然可以通过编写一个并将它作为第三个模板参数提供给std::unordered_map
声明来提供你自己的东西。
无论如何,以下内容让您了解使用 unordered_map 和标准库提供的其他工具时这是多么简单:
#include <iostream>
#include <fstream>
#include <string>
#include <unordered_map>
using namespace std;
int main(int argc, char *argv[])
{
// load map with our words and their counts
unordered_map<string, unsigned int> strs;
ifstream ifs("words.txt");
string str;
while (ifs >> str)
++strs[str];
ifs.close();
// output results (use a lambda if you're using C++11, which
// you likely are since we have unordered_map. I've provided
// this just to show how it is done prior to lambdas.
struct print_entry
{
ostream& os;
print_entry(ostream& os) : os(os) {};
// called by for_each for each map value.
typedef typename unordered_map<string, unsigned int>::value_type value_type;
void operator ()(const value_type& val) const
{
os << val.first << " : " << val.second << endl;
}
};
// walk map with for_each, printing each entry to cout
for_each(strs.begin(), strs.end(), print_entry(cout));
return EXIT_SUCCESS;
}
于 2012-12-19T01:13:31.860 回答
1
使用 std::unordered_map 提供的标准散列函数
然后您需要做的就是读取单词将它们添加到地图并增加计数(地图的值部分(而单词是地图的关键部分))。
于 2012-12-19T00:37:28.563 回答