提升库,使用 C++ 进行无序设置让我头疼
boost lib, unordered set with c++ is giving me a headache
好的,我知道这可能是一件非常简单的事情,但我有这段代码实现提升库(这是我第一次使用它),我似乎无法让它正常工作。 这是代码。哈希.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 类型的变量。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何在24位SDL_Surface上设置像素的颜色
- 正在将无序映射设置为无序映射的值
- 为什么无序设置混合值
- 设置要与无序集合一起使用的自定义类 - 在集合中找不到元素
- C 无序的设置问题与结构哈希
- 提升库,使用 C++ 进行无序设置让我头疼
- C++中设置无序,为什么需要哈希