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