我是C ++的初学者,哈希表有一些问题。我的程序需要一个哈希表结构。首先,我使用boost unordered_map。它拥有我需要的所有东西,但是它使我的程序变得如此缓慢。然后我想测试stl hash_map,但是我不能做所有我需要的事情。这是我的第一个代码(这是示例)

#include <hash_map>
using namespace std;

struct eqstr
{
  bool operator()(int s1, int s2) const
  {
    return s1==s2;
  }
};
typedef stdext::hash_map< int, int, stdext::hash_compare< int, eqstr > > HashTable;

int main()
{
  HashTable a;
  a.insert( std::pair<int,int>( 1, 1 ) );
  a.insert( std::pair<int,int>( 2, 2 ) );
  a.insert( std::pair<int,int>( 4, 4 ) );
//next i want to change value of key 2 to 20
  a[2] =  20;
//this code only insert pair<2,20> into a, buy when I use boost unordered_map this code                         modify previous key of 2
//next I try this code for delete 2 and insert new one
  a.erase(2);//this code does work nothing !!!
//next I try to find 2 and delete it
  HashTable::iterator i;
  i = a.find(2);//this code return end, and does not work!!!
  a.erase(i);//cause error
//but when I write this code, it works!!!
  i=a.begin();
  a.erase(i);
//and finally i write this code
  for (i = a.begin(); i!=a.end(); ++i)
  {
    if (i->first == 2 )
      break;
  }
  if (i!= a.end())
    a.erase(i);
//and this code work


但是,如果我想搜索我的数据,我使用数组而不是hash_map,为什么我无法使用o(1)访问,修改和删除hash_map
我的错误是什么,哪种哈希结构最适合我的程序,并且在初始化阶段进行了很多值修改。 google sparse_hash是否适合我,如果可以,可以给我一些教程。
谢谢你的帮助

最佳答案

您可能会看到:http://msdn.microsoft.com/en-us/library/525kffzd(VS.71).aspx

我认为stdext::hash_compare< int, eqstr >在这里引起问题。尝试擦除它。

哈希映射的另一种实现是std::tr1::unordered_map。但是我认为各种哈希映射实现的性能都差不多。您能否详细说明一下boost :: unordered_map有多慢?您是如何使用它的?做什么的?

关于c++ - 在STL中查找键Hash_map,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4407193/

10-11 19:40