2013-10-03 110 views
-1

我在C++中聲明HashTable變量時遇到問題。在Java語言中,我們可以聲明HashTable變量,像如何在C++中聲明HashMap類型

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

但我嘗試在C如下聲明HashTable ++,如代碼顯示,並與代碼得到一個錯誤: -

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

我有沒有想法解決這個問題任何人都可以教我一個解決方案來解決這個問題。謝謝。

+4

C++不是java,不使用新的如果不指向指針 – RamonBoza

+0

我仍然在模糊。你能給我一個簡單的示例代碼? – tontontv

+0

是的,看答案 – RamonBoza

回答

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

+0

我得到一個錯誤'unordered_map命名空間'std'沒有命名一個類型。 – tontontv

+0

使用[C++參考](http://en.cppreference.com/w/cpp/container/unordered_map)。你需要'#include '。 – jxh

+0

對於'shared_ptr',你需要'#include '。 – jxh

0

只是取得聯繫,您需要使用STL,

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

hash_map不是標準的;雖然是普通的C++ 11之前的版本。 C++ 11有unordered_map;因爲hash_map實現不同,所以決定重命名爲unordered_map。 – Bathsheba

+0

你是對的:) – RamonBoza