std :: list找不到类型

时间:2017-02-24 21:15:28

标签: c++ list

我写了自己的Hashmap实现。作为基础类型我使用

template <class K, class V>
class HashMap{
public:
    HashMap(){ table.reserve(100); }

    bool insert(const K& key, const V& value) {
        size_t index_pos = find_hash_position(key);
        table[index_pos].push_back(std::make_pair(key, value));
        return true;
    }
private:
    std::vector<std::list<std::pair<K, V>>> table;
};

然后我尝试创建Hashmap并将值插入:

ConcurrentHashMap<std::pair<int, int>, int)> hash_table;
hash_table.insert(std::make_pair(1, 1), 2);

但我有一个139错误和

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff768a58f in std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Python Exception <type 'exceptions.ValueError'> Cannot find type std::__cxx11::list<std::pair<std::pair<int, int>, int>, std::allocator<std::pair<std::pair<int, int>, int> > >::iterator::_Node: 
Python Exception <type 'exceptions.ValueError'> Cannot find type std::__cxx11::list<std::pair<std::pair<int, int>, int>, std::allocator<std::pair<std::pair<int, int>, int> > >::iterator::_Node: 

我错了什么以及如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

您的代码因为矢量大小为零而导致分段错误。 std :: vector intially不要分配任何空间,每当你在其中推送东西时,它们的空间就会扩展。

所以你应该检查你的“index_pos”,如果它的索引超过向量容量,请调整你的向量的大小。

bool insert(const K& key, const V& value) {
    size_t index_pos = find_hash_position(key);
    if(index_pos >= table.size())
    {
        table.resize(index_pos+1);
    }
    table[index_pos].push_back(std::make_pair(key, value));
    return true;
}