map預設按照key進行升序排序,和輸入的順序無關。
為了實作快速查找,map内部本身就是按序存儲的(比如紅黑樹)。在我們插入<key, value>鍵值對時,就會按照key的大小順序進行存儲,其中key的類型必須能夠進行 < 運算,且唯一,預設排序是按照從小到大便利記憶聯想到需要支援小于運算。
1、使用疊代器進行周遊列印
void printMap1(map<int, int, MyCompare> &m)
{
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key=" << it->first << "\t" << "value=" << it->second << endl;
}
cout << endl;
}
2、下面展示預設排序
void test02()
{
map<int, int, MyCompare> m; //利用仿函數
m.insert(pair<int, int>(1, 10));//匿名對組
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
m.insert(pair<int, int>(5, 50));
printMap1(m);
}
測試結果
3、下面展示利用仿函數進行降序排列
//利用仿函數
class MyCompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;// 降序排列
//return v1 < v2;// 升序排列
}
};
void test02()
{
map<int, int, MyCompare> m; //利用仿函數
m.insert(pair<int, int>(1, 10));//匿名對組
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
m.insert(pair<int, int>(5, 50));
printMap1(m);
}
測試結果
總代碼
/* 2022 03 29 */
// 3.9.6 map容器排序
// 學習目标:map容器預設排序規則為按照key值 從小到大進行排序,掌握如何改變排序規則
// 主要技術點:利用仿函數,可以改變排序規則
#include<iostream>
#include<map>
using namespace std;
// 列印 map容器
void printMap(map<int, int> &m)
{
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key=" << it->first << "\t" << "value=" << it->second << endl;
}
cout << endl;
}
//利用仿函數
class MyCompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;// 降序排列
//return v1 < v2;// 升序排列
}
};
void printMap1(map<int, int, MyCompare> &m)
{
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key=" << it->first << "\t" << "value=" << it->second << endl;
}
cout << endl;
}
void test01()
{
map<int, int> m;
m.insert(pair<int, int>(1, 10));//匿名對組
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
m.insert(pair<int, int>(5, 50));
printMap(m);
}
void test02()
{
map<int, int, MyCompare> m; //利用仿函數
m.insert(pair<int, int>(1, 10));//匿名對組
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
m.insert(pair<int, int>(5, 50));
printMap1(m);
}
int main()
{
test01();
test02();
system("pause");
return 0;
}