更新:我遵循約翰的指導,並修改了他的代碼,通過創建比較函數解決了我的問題,並將其插入到STL地圖中的比較參數中。由於我的字符串日期嚴格按照顯示的格式,使用substr會很好。我的輸出和代碼僅供參考。STL地圖排序
Date Total Sales
01JAN1900 $4
20JAN1902 $40
18NOV1912 $2500
19NOV1912 $2500
19OCT1923 $25
01JAN1991 $22
15NOV1991 $300
Grand Total: $5391
struct CompareDates
:
public std::binary_function <bool, std::string, std::string>
{
bool operator() (const std::string& lhs, const std::string& rhs)
{
if(lhs.substr(5,4) < rhs.substr(5,4))
{
return true;
}
else if (lhs.substr(5,4) == rhs.substr(5,4) && lhs.substr(2,3) < rhs.substr(2,3))
{
return true;
}
else if (lhs.substr(5,4) == rhs.substr(5,4) && lhs.substr(2,3) == rhs.substr(2,3) && lhs.substr(0,2) < rhs.substr(0,2))
{
return true;
}
else
{
return false;
}
}
};
map<string, double,CompareDates> dailyDatePrices;
初始問題:我需要將原始數據分類爲日常報告格式。因此,我使用STL map
將日期作爲關鍵字和物品價格存儲爲值。從我讀的內容來看,STL地圖是自動排序的。不過,我不希望它按照地圖進行排序,因爲它會生成下面所述的不需要的當前報告輸出。我會根據字符串日期進行排序(從最早到最新),並希望它是完全格式。在使用map之前,我已經使用矢量和函數比較器對日期進行了排序。有什麼辦法可以做到嗎?謝謝!
Raw Data
STRAW:10:15NOV1991
TOY:10:15NOV1991
BARLEY:5:01OCT1992
Undesired Current Report Output
01OCT1992 5
15NOV1991 20
Expected Report Output
15NOV1991 20
01OCT1992 5
使用選擇的排序標準實例化映射。 – juanchopanza
你將不得不將字符串轉換爲日期,並讓日期的順序得到正確的順序(或使用強的比較器來完成該順序) - 最好查找日期庫 – Mark
你的'日期類定義?該類中具體是'operator <'? – Naveen