2012-11-25 59 views
0

我正在使用一個對象作爲multimap的關鍵字。該對象是我創建的自定義日期類。我只是想知道是否有可能使用equal_range()的對象中找到的變量?爲multimap使用對象變量equal_range()

這是檢查我的自定義日期對象中的月份變量。

這就像這樣(僞代碼)。

int january = 1; 
foundValues = myMultimap.equal_range(january); 

for (it=foundValues.first; it!=foundValues.second; ++it) 
{ 
    cout << " " << (*it).second; 
    cout << endl; 
} 

這是否會仔細檢查每個鍵對象,並檢查該對象內的變量等於「一月」,然後返回配對的關鍵價值?

謝謝。

+2

爲什麼不把這個月當作鑰匙呢? – Xymostech

+0

如果你的日期包括年份,它將不起作用,因爲「所有年份的一月中的所有日子」不是一個範圍。 –

+0

Xymistech-原因是因爲我需要搜索特定年份某個月的所有值。這就是爲什麼我用密鑰的日期類。我嘗試使用格式爲/ mm/yyy的包含完整日期的字符串,但是當我執行inorder travelsal時,多地圖只按日期排序。所以,當你看到輸出的日子是有序的,但月份和年份不是。 – aelindgard

回答

0

關聯容器的搜索成員僅處理密鑰。 Theyexist,因爲他們利用容器的內部結構來保證在O(log(n))時間(其中n是容器中元素的數量)查找值(或其缺失)。

如果你想找到一個匹配條件的序列中的所有eleements,你可能想要使用std::copy_if()和一個合適的謂詞。

+0

啊。謝謝。我可以再次確認該功能嗎? copy_if(mymulti.begin(),my multi.end(),compmonth());像這樣? – aelindgard

+0

你可以把它叫做'std :: copy_if(multimap.begin(),multimap.end(),std :: back_inserter(target),compmonth())'。這個算法在C++ 2011中是新的。如果你需要使用C++ 2003,你可以使用'std :: remove_copy_if()',但顯然你需要否定這個謂詞。 –