我有以下代码在C ++中实现一个简单的Hash / Dict
Hash.h
using namespace std;
#include <string>
#include <vector>
class Hash
{
private:
vector<const char*> key_vector;
vector<const char*> value_vector;
public:
void set_attribute(const char*, const char*);
string get_attribute(const char*);
};
Hash.cpp
using namespace std;
#include "Hash.h"
void Hash::set_attribute(const char* key, const char* value)
{
key_vector.push_back(key);
value_vector.push_back(value);
}
string Hash::get_attribute(const char* key)
{
for (int i = 0; i < key_vector.size(); i++)
{
if (key_vector[i] == key)
{
return value_vector[i];
}
}
}
目前,它可以作为键/值的唯一类型是const char*
,但我想扩展它以便它可以采用任何类型(显然每个哈希只有一种类型)。我正在考虑通过定义一个以类型作为参数的构造函数来做到这一点,但我不知道在这种情况下如何做到这一点。我该怎么做,我将如何实现它,以便set_attribute定义为采用该类型?
编译器:Mono
答案 0 :(得分:2)
答案 1 :(得分:2)
#ifndef HASH_INCLUDED_H
#define HASH_INCLUDED_H
#include <string>
#include <vector>
template <typename T>
class Hash
{
private:
std::vector<const T*> key_vector;
std::vector<const T*> value_vector;
public:
void set_attribute(const T*, const T*)
{
/* you need to add definition in your header file for templates */
}
T* get_attribute(const T*)
{
/* you need to add definition in your header file for templates */
}
};
#endif
请注意,我已删除了using namespace std;
,因为它完全删除了拥有名称空间的全部内容,尤其是在头文件中。
编辑:另外,你有没有理由不使用std :: vector的迭代器来遍历它的项目?