2011-08-10 27 views
0

我有這樣一段代碼:爲什麼設置<string> ::迭代器不能用作映射關鍵字?

set<string>::iterator it1; 
set<string>::iterator it2; 
pair<set<string>::iterator,bool> ret; 

set<string> s; 
ret = s.insert("bbbb1"); 
it1 = ret.first; 

ret = s.insert("bbbb2"); 
it2 = ret.first; 

map<set<string>::iterator, set<string>::iterator> m; 

m.insert(make_pair(it1,it2)); 

但最後一行 「m.insert(make_pair(IT1,IT2));」失敗..

+0

使用迭代器作爲映射鍵是一個可怕的想法(因爲任何迭代器隨後失效可能會導致未定義的行爲)。不要這樣做。 :-( –

+1

@Chris:迭代器到std :: set很少失效 –

+0

@James:是的,但是如果項目從集合中移除,那些與這些項目對應的迭代器就是:-) –

回答

8

std::set迭代器不是隨機訪問迭代器,因此它們不小於可比較的。

您在std::map中用作密鑰的類型必須能夠使用strict weak ordering進行排序。默認情況下,std::map使用<來訂購密鑰。您可以在定義std::map的類型時通過提供比較器來更改此行爲。您可能需要使用迭代器指向的對象執行一些關係比較。

+0

謝謝,有用 – Jianzhong

相關問題