-1

有一小段代码我遇到了麻烦。到目前为止,我已经设置了一个程序,它可以读取 words.txt,然后计算每个单词。当我计算它时,我需要一个哈希函数,它只会通过二次碰撞方案对每个单词进行一次哈希处理,并允许我将它存储在一个表中。

4

2 回答 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 回答