我写了自己的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:
我错了什么以及如何克服这个问题?
答案 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;
}