1、按 key 排序html
1.map順序排序(小的在前,大的在後):less
map<float,string,less<float> > m_aSort;//已float從小到大排序函數
2.map逆序排序(大的在前,小的在後):ui
map<float,string,greater<float> > m_aSortR;//已float從大到小排序spa
注: 3d
用 greater_equal(less_equal) 作第三個參數來排序,map的 find 函數會失敗。htm
若是須要存儲相同key值的 鍵值對,能夠用multimap,參見:http://www.javashuo.com/article/p-hhuuilvf-ne.html
blog
struct SIndexData { string sCode; int iDate; int iTime; float f1; SIndexData(): iDate(0), iTime(0) { } bool operator == (const SIndexData & obj) const { return sCode == obj.sCode && iDate == obj.iDate && iTime == obj.iTime; } bool operator < (const SIndexData & obj) const { return iDate < obj.iDate ; } }; map<float, SIndexData, greater_equal<float> > m_is; SIndexData sIndexData1; sIndexData1.sCode = "000001"; sIndexData1.iDate = 20171025; sIndexData1.iTime = 94000; sIndexData1.f1 = 7.8f; m_is[sIndexData1.f1] = sIndexData1; SIndexData sIndexData2; sIndexData2.sCode = "000002"; sIndexData2.iDate = 20171025; sIndexData2.iTime = 94000; sIndexData2.f1 = 7.9f; m_is[sIndexData2.f1] = sIndexData2; SIndexData sIndexData3; sIndexData3.sCode = "000004"; sIndexData3.iDate = 20171025; sIndexData3.iTime = 94000; sIndexData3.f1 = 7.8f; //m_is[sIndexData3.f1] = sIndexData3; m_is.insert(make_pair(sIndexData3.f1, sIndexData3)); SIndexData sIndexData4 = m_is[sIndexData3.f1]; map<float, SIndexData, greater_equal<float> >::iterator iter = m_is.find(sIndexData3.f1); if (iter != m_is.end()) { cout << "find succ" << endl; } else { cout << "find error" << endl; } getchar();
緣由分析參見:http://www.javashuo.com/article/p-hzwyyndh-ne.html排序
2、按 value 排序get
typedef pair<int, string> PAIR; bool CmpByValue(const PAIR & lhs, const PAIR & rhs) { return lhs.second < rhs.second; //按 value 從小到大排序。若是 value 不是基礎類型(int、short等),而是本身定義的結構體,就在結構體中重載 < 運算符(詳見:http://www.cnblogs.com/SZxiaochun/p/6377084.html 第41行)。 } map<int,string> m_two; m_two[1] = "xiaochun"; m_two.insert(make_pair(2,"chunxiao")); vector<PAIR> vPair; vPair.insert(vPair.end(), m_two.begin(), m_two.end()); sort(vPair.begin(), vPair.end(), CmpByValue);