天天看點

C++筆記 STL map容器基本操作 排序

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);

}
           

測試結果 

C++筆記 STL map容器基本操作 排序

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);

}
           

測試結果 

C++筆記 STL map容器基本操作 排序
總代碼
/*   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;
}