提升库,使用 C++ 进行无序设置让我头疼

boost lib, unordered set with c++ is giving me a headache

本文关键字:设置 无序 使用 C++      更新时间:2023-10-16

好的,我知道这可能是一件非常简单的事情,但我有这段代码实现提升库(这是我第一次使用它),我似乎无法让它正常工作。 这是代码。哈希.h

#include .....
#include "boost/unordered_set.hpp"
#ifndef HASH_H
#define HASH_H
class hash{
public:
    int toHash(string);
    void insertKey(string);
    bool lookupKey(string);
private:
    string hashTable[];
    vector<string> vfile;
    typedef boost::unordered_set<std::string, int> um;
struct hashkey{
    string state;
    int stateno;
};
};
#endif  /* HASH_H */

还有哈希.cpp

#include <boost/unordered/unordered_set.hpp>
#include "hash.h"
int hash::toHash(string key){
    unsigned int x;
    std::stringstream ss;
    ss << std::hex << key;
    ss >> x;
    return x;
}
void hash::insertKey(string key){
    um.insert(key,toHash(key));
}
bool hash::lookupKey(string key){
    return um.find(key)==um.end();
}

我收到"哈希.cpp:18:7:错误:在".令牌"之前预期为非限定 id"。我重申,我知道这可能很容易,我只是以前没有使用过提升库。我在互联网上看了很多例子,我似乎不能让这个"简单"的作品工作。谢谢。

你的um不是成员变量,它是一个typedef。 摆脱typedef关键字。

现在关于你的第二个问题...

摆脱你的哈希计算成员方法和模板的第二个参数。 摆脱 insert() 的第二个参数。 boost unordered_set 已经为许多标准类型提供了哈希函数,包括 std::string。 但是,如果要对用户定义的类型进行哈希处理,则需要提供哈希函数,但不是在此处执行的方式。 您将创建一个名为 hash_value() 的函数的重载,如下所示:

std::size_t hash_value(yourUserDefinedType_probablyAClassName const &t) 
{
    std::size_t retValue;
    //...compute your hash however you want & store in retValue....
    return retValue;
} 

使用 typedef 来声明类型。 um 是一个类型,而不是一个变量。从代码中删除 typedef,或声明 um 类型的变量。