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