2011-04-07 72 views
0

我正在嘗試做一個非常簡單的定義具有比較函數的新類型散列集的任務。定義具有比較函數的散列集

using namespace std; 
#include <iostream> 
#include <ext/hash_set> 
#include <hash_set> 
#include <functional> 
#include <hash_compare> 
typedef __gnu_cxx::hash_set<int, hash_compare<int, less<int> > > hashcomp; 

int main(int argc, char * const argv[]) { 

} 

錯誤:hash_compare沒有定義(第7行)
錯誤:前 「>」 令牌(第7行)預期不合格-ID
錯誤:模板參數2是無效的。 (第7行)

+0

@Pegah:你爲什麼不用線號發佈錯誤信息......並且還要提及哪一行對應哪一段代碼...... – Nawaz 2011-04-07 17:00:32

+0

以前是空間還是:: intentional? – 2011-04-07 17:02:07

+0

@Alexei Sholik的空間不是故意的。刪除它。還是一樣的錯誤。 – Pegah 2011-04-07 17:04:32

回答

1

看到錯誤,我想你沒有包含<functional>,因爲你在代碼中使用std::less<int>。我假設您的代碼中的less<int>實際上是std::less<int>

編輯:

錯誤消息明確表示

Error: hash_compare is not defined.

你想要做什麼?包含定義爲hash_compare的頭文件。

+0

@Nawaz我加了:#include 但仍然是一樣的錯誤。 – Pegah 2011-04-07 16:39:07

+0

@Pegah:使用'std :: less '而不是'less '。 – Nawaz 2011-04-07 16:40:12

+0

@Nawaz using namespace std; #include #include typedef __gnu_cxx :: hash_set 現在是這樣,但仍然是相同的錯誤。 – Pegah 2011-04-07 16:42:23

0

您的要求是矛盾的。根據定義,哈希表具有隨機順序。

+0

這意味着無法對hash_set進行排序? – Pegah 2011-04-07 17:41:30

+0

不是。散列管理強加它自己的順序(這不是你可能想要的任何東西)。 – 2011-04-07 18:41:13

+0

感謝您的回答。 – Pegah 2011-04-07 19:05:11