#include<iostream>//c++中标准的输入和输出流
using namespace std;//引用标准的名空间std
#include<map>//引用map容器必须要包含map容器的头文件
class compare//一个名叫compare的类
{
public://在public下的作用域在类内类外都可以进行访问
bool operator()(int m, int n)const//注意要在后面加const
{
return m > n;//降序排列返回的就两个值中的较大值
}
};
void printmap(map<int, int>m)
{//for循环第一个参数是找到起始迭代器的位置
// //第二个参数是 for循环退出的条件,
// //d.end()指向的是终止迭代器的下一个位置,
//那么退出的条件该迭代器已经到了终止迭代器的位置了
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << (*it).first << "\t" << (*it).second << endl;
}
//(*it).first是引用map容器内的第一个参数;叫做键值,key
//(*it).second引用map容器的第二个参数;叫做实值,value
//其中键值起到索引的作用
cout << endl;//在容器内所有元素都打印完成后打印一个换行
}
void test01()
{
map<int, int>m;
m.insert(make_pair(10, 100));
m.insert(make_pair(2000, 100));
m.insert(make_pair(340, 100));
m.insert(make_pair(90, 100));
cout << "升序排列" << endl;
printmap(m);//默认时按照键值进行升序排列的
map<int, int, compare>m2;//注意这个有谓词的map容器的打印是要单独写的
m2.insert(make_pair(10, 100));
m2.insert(make_pair(2000, 100));
m2.insert(make_pair(340, 100));
m2.insert(make_pair(90, 100));
cout << "降序排列" << endl;//降序排列在打印容器内的所有元素的时候,必须重新指定打印的规则
for (map<int, int, compare>::iterator it = m2.begin(); it != m2.end(); it++)
{//在实现降序的时候,在mapmap容器内有三个参数,第三个参数时谓词,也就是仿函数
cout << (*it).first << "\t" << (*it).second << endl;
}
cout << endl;//在容器内所有元素都打印完成后打印一个换行
}
int main(void)//主函数
{
test01();//调用函数
system("pause");
//system("pause")和system("pause")作用和效果一样,因为dos命令是不区分大小写的。
//该语句是暂停的意思:等待用户信号;不然控制台程序会一闪即过,你来不及看到执行结果
return 0;//程序正常运行返回一个0
}
map容器的排序(升序和降序) c++ 通俗易懂
最新推荐文章于 2024-06-03 10:42:48 发布