C ++在std :: unordered_set <T>中获取类型密钥

时间:2019-07-24 12:06:39

标签: c++

我正在创建一个自定义容器,其语义应为std::set<T>,但是在迭代时应保留插入顺序。我的实现计划是将实际对象存储在std::vector<T>中,然后有一个std::unordered_map<std::hash<T>::type, size_t>,该对象从对象的哈希映射到存储向量中的索引。因此,假设Tstd::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>() ),但目前没有成功。这有可能吗?

1 个答案:

答案 0 :(得分:0)

问题在评论中得到了解答-但整个方法被断定是从根本上破损的,我只是忘了它。