• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 浅析stl序列容器(map和set)的仿函数排序

浅析stl序列容器(map和set)的仿函数排序

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了stl map,stl map用法,stl set map,c stl map,stl map find等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

问题:set是一个自动有序的集合容器,这是set的一个最实惠的性质,从小到大,只要你插入进去,就有序了。但是,如果你不想要这个顺序呢,是不是可以人为控制set容器
的元素顺序呢?答案是,可以的,因为stl也是程序员设计的。

首先看stl的模板构造函数

举例:

void testset()
{
// 第一种使用方法
bool(*fn_pt)(int,int) = fncomp;
set sixth (fn_pt);
// 第二中使用方法
set s;                 // class as Compare
s.insert(4);
s.insert(5);
set::iterator it;
for(it=s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
cout <<endl;
};
</div>
注意:如果set元素是一个结构体,你最好要设置你的仿函数,不然set一般默认是按第一个字段排序的,而我们的实际情况是想按序号i排序:

int seq;
int64_t time;
string strfrom;
string strto;
string strinfo;

bool operator <(const ST_Message& other) const // 注意是const函数
{
if (seq != other.seq) // dtime按升序排序
{
return (seq < other.seq);
}
else if(time < other.time)
{
return (time < other.time);
}
else if(strcmp(strfrom.c_str(), other.strfrom.c_str()) != 0)
{
return (strcmp(strfrom.c_str(), other.strfrom.c_str()) < 0);
}
else if(strcmp(strto.c_str(), other.strto.c_str()) != 0)
{
return (strcmp(strto.c_str(), other.strto.c_str()) < 0);
}
else
{
return (strcmp(strinfo.c_str(), other.strinfo.c_str()) < 0);
}
}
};
</div>
stl中自动有序的容器map也和set有相同的应用,如果你想快速理解,那么把这篇文章中的set改成map就差不多了。

总之,有序的stl容器在工程中应用什么方便和广泛,但是当我们需要自己的排序的时候,可以用仿函数来设置它!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++中 map的基本操作
  • 关于STL的erase()陷阱-迭代器失效问题的总结
  • 关于STL中的map容器的一些总结
  • 浅析stl序列容器(map和set)的仿函数排序
  • stl容器set,map,vector之erase用法与返回值详细解析

相关文章

  • 2017-05-28详解C语言中的memset()函数
  • 2017-05-28C语言实现二叉树遍历的迭代算法
  • 2017-05-28C++实现迷宫算法实例解析
  • 2017-05-28用C语言判断字符是否为空白字符或特殊字符的方法
  • 2017-05-28C 语言条件运算符详细讲解
  • 2017-05-28C语言使用openSSL库AES模块实现加密功能详解
  • 2017-05-28C++实现的泛型List类分享
  • 2017-05-28C 语言基础教程(我的C之旅开始了)[九]
  • 2017-05-28基于list循环删除元素,迭代器失效的问题详解
  • 2017-05-28C++画正弦线实例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解C++中shared_ptr的使用教程
    • C++中的extern声明变量详解
    • C语言中数组作为函数的参数以及返回值的使用简单入门
    • C语言编程中的联合体union入门学习教程
    • tc编译的dos程序和vc编译的win32控制台程序的异同
    • c++中string类成员函数c_str()的用法
    • 详解数据结构C语言实现之循环队列
    • 从string类的实现看C++类的四大函数(面试常见)
    • 如何解决C语言,函数名与宏冲突
    • C++ 面试题翻译电话号码实例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有