【问题标题】:How to declared HashMap type in C++如何在 C++ 中声明 HashMap 类型
【发布时间】:2013-10-03 07:30:59
【问题描述】:

我在 C++ 中声明 HashTable 变量时遇到问题。在java语言中我们可以声明HashTable变量,比如

Hashtable<String, sqlStat>  pool = new Hashtable<String, sqlstat>(30);

但我尝试在 C++ 中声明 HashTable,如下所示的代码并得到这些代码的错误:-

std::unordered_map<string, sqlstmt*> abc = new std::unordered_map<string, sqlstmt*>(30);

我不知道如何解决这个问题,谁能教我解决这个问题的方法。谢谢。

【问题讨论】:

  • c++不是java,不指向指针就不要使用new
  • 我还不清楚。你能给我一个简单的示例代码吗?

标签: java c++ hashtable


【解决方案1】:

new 仅用于动态分配,结果是指针,因此需要将其分配给指针变量或提供给接受指针的对象。在 C++ 中,您可以在不使用 new 的情况下声明本地范围的实例。在您的情况下,只需将 new ... 留在外面:

std::unordered_map<string, sqlstmt*> abc;
abc["query"] = new sqlstmt(...);

来自Java,在使用动态分配时,应该采用智能指针而不是裸指针。

std::unordered_map<string, std::shared_ptr<sqlstmt> > abc;
abc["query"] = std::make_shared<sqlsmt>(...);

这样您就可以在不再引用对象时自动获得内存的行为。默认情况下,Java 会为您提供这种行为。在 C++ 中,您使用智能指针来获得该行为。如果没有智能指针,您必须在完成动态分配的对象后显式调用delete

【讨论】:

  • 我收到一个错误,即命名空间“std”中的“unordered_map”没有命名类型。
  • 使用C++ reference。你需要#include &lt;unordered_map&gt;
  • 对于shared_ptr,您需要#include &lt;memory&gt;
  • 我已经包含了对它的引用。但它仍然得到同样的错误说'unordered_map'没有命名类型。
  • this example。确保您使用 C++ 11 模式进行编译。
【解决方案2】:

只是为了取得联系,您需要使用 STL,

hash_map<char* key, char* value> map; //map is empty
map["a"]= "The value of a";

【讨论】:

  • hash_map 不是标准的;虽然在 C++11 之前很常见。 C++11 有 unordered_map;由于 hash_map 实现不同,因此决定重命名为 unordered_map。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多