vector 使用 c++11 Lambda 表达式 排序
struct SIndexDataNew
{
1 optional short shtMarket;
2 optional string sCode;
3 optional int iDate;
4 optional map<string, double> mField;
5 optional int iTime = 0; //指标时间格式:HHMMSS,仅对分钟级别指标有效
6 optional string sName;
}; struct SIndexNew
{
1 optional vector<SIndexDataNew> vData;
}; //需求:SIndexDataNew.vData 按用户传入的排序字段(mField 中的key), 进行排序。 //解决方法:使用 c++ Lambda 表达式 bool SIndexNewSortField(const string &sSortField, const int iSortType, const int iNum, SIndexNew &sIndexNew)
{
try
{
TLOG_DEBUG("begin SIndexNewSortField, sSortField:" << sSortField << "|" << "iSortType:" << iSortType << endl);
if (!sSortField.empty())
{
switch (iSortType)
{
case 0: //倒序
{
sort(sIndexNew.vData.begin(), sIndexNew.vData.end(), [&](SIndexDataNew lhs, SIndexDataNew rhs){return lhs.mField[sSortField] > rhs.mField[sSortField];}); // Lambda 表达式 按传入的 sSortField 排序
break;
}
case 1: //顺序
{
sort(sIndexNew.vData.begin(), sIndexNew.vData.end(), [&](SIndexDataNew lhs, SIndexDataNew rhs){return lhs.mField[sSortField] < rhs.mField[sSortField];}); // Lambda 表达式 按传入的 sSortField 排序
break;
}
}
SIndexNew sIndexNewTmp;
int iEndPos = iNum >= 0 ? min(iNum, (int)sIndexNew.vData.size()) : sIndexNew.vData.size();
for (int i = 0; i < iEndPos; i++)
{
sIndexNewTmp.vData.push_back(sIndexNew.vData[i]);
}
sIndexNew.vData.swap(sIndexNewTmp.vData);
}
}
catch (std::exception &ex)
{
TLOG_ERROR("exception:" << ex.what() << endl);
return false;
}
catch (...)
{
TLOG_ERROR("Unknown exception."<< endl);
return false;
}
return true;
}
参见:https://www.cnblogs.com/DswCnblog/p/5629165.html
vector 使用 c++11 Lambda 表达式 排序的更多相关文章
- C++11 lambda 表达式
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...
- C++11 lambda 表达式解析
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...
- 详解 C++11 lambda表达式
详解 C++11 lambda表达式 lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的la ...
- lambda表达式排序
lambda表达式排序简洁 1.给一个字符串数组: String[] atp = {"2016-06-28 08:00:00", "2017-12-05 19:17:32 ...
- C++11 lambda表达式学习
lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ...
- C++ 11 Lambda表达式
C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可以方便的定义和创建匿名函数.对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多 ...
- C++ 11 Lambda表达式、auto、function、bind、final、override
接触了cocos2dx 3.0,就必须得看C++ 11了.有分享过帖子:[转帖]漫话C++0x(四) —- function, bind和lambda.其实最后的Lambda没太怎么看懂. 看不懂没关 ...
- C++11 Lambda表达式简单解析
C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...
- C++11 lambda表达式(19篇C++11文章)
C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问. Lambda表达式的语法通过下图来介绍: 这里假设我们定义了一个如上图的lam ...
随机推荐
- 教你用Windows自带工具给优盘/移动硬盘添加密码
教你用Windows自带工具给优盘/移动硬盘添加密码 本文中优盘,移动硬盘和分区操作方式一样,为方便描述,下文将只说优盘 优盘成了很多人每天都会用到的工具,有时候自己优盘会存着一些不希望别人看到的文件 ...
- BZOJ4249 : Walls 防壁
首先可以将攻击位置整理成折线,答案不变. 对于一个长度为$k$的询问,若折线不超过两段,那么显然可以暴力贪心求解. 否则考虑折线中最短的一段$x\rightarrow y$,若其长度$\leq k$: ...
- Cocos Creator 节点
//节点从创建到节点挂载一些过程 1.JS中节点使用: a.创建:在properties中定义节点(可能包括节点的默认值和类型): b.挂载:在相应的方法中获取节点获取相应节点,挂载到父元素 例== ...
- 删除office拥有多个都需要激活的授权信息
首先确认office目录下存在“ospp.vbs”文件,可以搜索确认文件路径. 我的是在C:\Program Files\Microsoft Office\Office16 然后以管理员身份打开cm ...
- day2_抓包_python基础
char抓包, 1,作用,定位问题实在前端还是在后端.2.在overview中查看返回码是否正常,一般是200,在看response中是否正常返回数据,可查看请求时间等 2.在sequence视图中的 ...
- Jmeter接口测试实例3-登录
Jmeter实例3:登录 添加http协议—添加IP.路径.方法,察看结果树,运行 登录成功
- 微信小程序-添加手机联系人
仅供参考 1,wxml: <view bindlongtap="phoneNumTap">{{phoneNum}}</view> 2,js: data = ...
- vue路由打开新窗口
一. <router-link>标签实现新窗口打开: 官方文档中说 v-link 指令被 <router-link> 组件指令替代,且 <router-link> ...
- 创建MySQL用户 赋予某指定库表的权限
摘自: http://renxiangzyq.iteye.com/blog/763837 update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't h ...
- Linux系统中如何查找大文件或文件夹的方法
在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件 ...