C++11-17特性自用

std::find_if实现一个好用的结构体阶段排序查找

以下我想实现一个等级阶段的结构适配

struct TAG_LEVEL_EFF;// 等级阶段的结构

std::map<int,TAG_LEVEL_EFF> level_eff_map;//<等级,等级结构>

TAG_LEVEL_EFF get_rs;

int cur_level = 0;//比如要找0级适用的

auto it = std::find_if(level_eff_map.rbegin(), level_eff_map.rend(),
        [cur_level](const std::pair<int, tag_LevelEff>& itor) {return cur_level >= itor.first; });//反向查找 

if (it != level_eff_map.rend())
        get_rs= it->second;//查找结果

std::sort多种(两种以上)的排序规则

以下想做一个n种的排序规则,结构根据枚举EPS_STAGE的值,按照可获取>不能获取>已获取的排序,都排完,再按照id依次排列

enum EPS_STAGE
{
    EPS_STAGE_CANNOT_GET = 0,//不能获取
    EPS_STAGE_CAN_GET,//可获取,但未获取
    EPS_STAGE_GOT,//已获取
};

struct TAG_SORT_DATA
{
    int   id = 0;//stage排完,再按照id排
    int   stage = EPS_STAGE_CANNOT_GET ;//按照可获取>不能获取>已获取的排序
};
 

std::vector<TAG_SORT_DATA*> data_vec;

std::sort(data_vec.begin(), data_vec.end(),
        [](TAG_SORT_DATA* l, TAG_SORT_DATA* r)->bool
    {
        //状态一致按配置
        // 可获取  未获取   已获取
        if (!l || !r)
            return false;
        if (l->stage == r->stage)
            return l->id < r->id;
        if (l->stage == EPS_STAGE_CAN_GET)
            return true;
        if (l->stage == EPS_STAGE_CANNOT_GET && r->stage == EPS_STAGE_GOT)
            return true;
        return false;
    }
    );

std::transform将map数据导入到vector

map本就有序,导入到vector某些情况更方便的使用

以下将info_map导入到info_vec中

struct TAG_INFO;
typedef std::map<int,TAG_INFO> Info_Map;
typedef std::vector<TAG_INFO> Info_Vec;
Info_Map info_map;
Info_Vec info_vec;

std::transform(info_map.begin(),
		info_map.end(),
		std::back_inserter(info_vec),
		[](const Info_Map::value_type &pair) {return pair.second; });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值