2013-03-04 77 views
2

我知道在std::map我們有一個關鍵字和一個相應的映射值。是std :: map <std :: set <long>,double> AND std:map <std :: pair <long, long>,double> C++中的有效數據類型?

現在在我提到的數據類型中,鍵將是std::set<long>std::pair<long, long>類型。那麼,是否有效地記住,在映射值中存儲的是按鍵的排序值。那麼,std::map<std::set<long>, double>std:map< std::pair<long, long>, double>有效嗎?

+3

也許我錯過了我的咖啡因劑量,我的大腦壞了,但在你的聲明'std :: map ',std :: set是模板,而不是一種。你將不得不寫'std :: map ,double>'來創建一個類型。 – paercebal 2013-03-04 13:55:39

+0

是的,我只是說。但我的懶惰認爲這部分是自我暗示! – user1599964 2013-03-04 13:57:09

+1

顯然,安德烈同意我的觀點,我懷疑你的編譯器也會......懶惰是一種美德,但不要濫用它...... ;-) – paercebal 2013-03-04 13:58:27

回答

6

std::set有一個operator<它執行兩組相同類型之間的詞典比較。所以是的,std::set<T>可以成爲地圖的有效密鑰。

一個std::pair<T1,T2>也有operator<實施的逐一比較,所以std::map<std::pair<T1, T2>, T3>也將是有效的當且僅當T1T2有一個小於比較operator<實施嚴格的弱序。所以要求更嚴格。 T1T2需要比較作爲地圖的關鍵字,但他們不需要它來形成有效的對。所以一個有效的對不一定會爲地圖形成一個有效的密鑰。另一方面,你可以用你自己的比較標準來實例化地圖。

std::map<std::pair<T1, T2>, T3, Comp> m; 
4

不,語法錯誤。你想要的是std::map<std::set<a_type_here>, double>,所以添加模板參數設置。

a_type_here應該有operator<或者你需要使用std::set<a_type_here, compare_function>

你似乎想要的是:如何使用std::map<std::pair<long, long>, double> mapping

例;mapping[std::make_pair(1,2)] = 0.1;

+0

如果該類型沒有'operator <',那麼'set '甚至不會編譯,所以這個問題是沒有意義的。 – juanchopanza 2013-03-04 14:02:00

相關問題