今天我试图在编译和运行时制作哈希表。 但是我并不熟悉constexpr,而且我在网上找不到我想要的东西。
有我的代码:
#ifndef HASHTABLE_HPP
#define HASHTABLE_HPP
#include <cstddef>
#include <vector>
#include <string>
namespace base
{
template <typename K, typename V>
class HashTable
{
constexpr HashTable(const size_t size, const std::pair<K, V> data[])
: _hsize(size), _rsize(size), _nodes(initNodes(data)) {}
HashTable(size_t hsize): _hsize(hsize), _rsize(0) {}
~HashTable() = default;
private:
class HashNode
{
public:
constexpr HashNode(HashNode *next, K key, V data, int flags): _next(next),_key(key),
_data(data),_flags(flags) {}
public:
HashNode* _next;
K _key;
V _data;
int _flags;
};
private:
size_t _hsize; // Size of nodes[]
size_t _rsize; // Number of elements
HashNode* _nodes;
private:
unsigned hash();
constexpr HashNode* initNodes(const std::pair<K, V> data[], const size_t size)
{
}
public:
void emptyTable();
void fillTable();
int compareNodes(K, K);
int addNode(K, V);
V getNode(K);
V removeNode(K);
};
}
#endif
我能做出类似的东西吗?但是initNodes存在一些问题。 我想用gcc 4.9(gcc-clite)编译。 拜托,你能给我一些建议吗?
非常感谢! 祝你有愉快的一天
编辑: 更精确,我希望能够在编译时初始化一个const哈希表。如果可以使用同一个类进行运行时