我正在创建一个自定义容器,其语义应为std::set<T>
,但是在迭代时应保留插入顺序。我的实现计划是将实际对象存储在std::vector<T>
中,然后有一个std::unordered_map<std::hash<T>::type, size_t>
,该对象从对象的哈希映射到存储向量中的索引。因此,假设T
为std::string
:
iset<std::string> is;
is.insert("A");
is.insert("B");
is.insert("C");
内部数据结构应为:
storage: ["A", "B", "C"]
index: {hash("A"): 0, hash("B"): 1, hash("C"): 2}
我的初始实现是这样的-在std::unordered_map<?, size_t>
的声明中明显缺少一部分:
template <typename T>
class iset {
std::vector<T> storage;
std::unordered_map<?, size_t> index; // What should be the key type here?
void insert(T&& value) {
auto key = std::hash<T>{}(value);
if (this->index.count(key) == 0) {
this->index.insert( std::make_pair(key, this->storeage.size()));
this->storage.push_back(std::move(value));
}
}
}
我尝试了各种操作,例如:decltype( std::hash<T>() )
,但目前没有成功。这有可能吗?
答案 0 :(得分:0)
问题在评论中得到了解答-但整个方法被断定是从根本上破损的,我只是忘了它。