C++ 我可以根据条件使用不同的lambda调用std::sort吗?
现在我对std::sort有三个单独的调用,它们都可以工作,但是有可能把代码压缩一点吗?比如C++ 我可以根据条件使用不同的lambda调用std::sort吗?,c++,sorting,lambda,C++,Sorting,Lambda,现在我对std::sort有三个单独的调用,它们都可以工作,但是有可能把代码压缩一点吗?比如 const char *order; vector<game_s*> gms; // an elsewhere-filled vector of pointers to game structs, which themselves contain // an opponent name and two timestamps, among
const char *order;
vector<game_s*> gms; // an elsewhere-filled vector of pointers to game structs, which themselves contain
// an opponent name and two timestamps, among other members
sometype cmp; // how to declare lambda function?
if (! strcmp(order, "by name"))
cmp = [] (game_s* g1, game_s *g2) { return strcmp(g1->opp, g2->opp) < 0; };
else if (! strcmp(order, "by_start"))
cmp = [] (game_s* g1, game_s *g2) { return strcmp(g1->starttm, g2->starttm)< 0; };
else if (! strcmp(order, "by_end"))
cmp = [] (game_s* g1, game_s *g2) { return strcmp(g1->endtm, g2->endtm) < 0; };
else { cout << '"' << order << '"' << " is not a valid sort order."; return; }
sort(gms.begin(), gms.end(), cmp);
const char*顺序;
向量gms;//指向游戏结构的指针向量,这些结构本身包含
//一个对手名称和两个时间戳,以及其他成员
sometype cmp;//如何声明lambda函数?
如果(!strcmp(订单,“按名称”))
cmp=[](game_s*g1,game_s*g2){返回strcmp(g1->opp,g2->opp)<0;};
否则,如果(!strcmp(订单,“按开始”))
cmp=[](game_s*g1,game_s*g2){返回strcmp(g1->starttm,g2->starttm)<0;};
否则,如果(!strcmp(订单,“结束”))
cmp=[](game_s*g1,game_s*g2){返回strcmp(g1->endtm,g2->endtm)<0;};
其他的{cout您正在寻找的sometype
是。另一个不相关的问题是,为什么在game
结构中使用C样式的空终止字符串而不是std::string
?为什么不在每种情况下调用std::sort
?与您展示的内容实际上没有什么实际区别。事实上,现在代码更多了,since您需要为cmp
变量的定义增加一行,为单独的std::sort
调用增加一行。我的应用程序基于FLTK,它不做字符串。您仍然可以在代码中使用std::string
。将其传递给C函数时,请使用C_str()
member函数获取const char*
。从框架中获取字符串时,只需将其分配给std::string
对象。是的,在与框架交互时,这可能会使事情复杂化,但希望这只是代码的一小部分,而代码中更大、更重要的部分将被删除我会更容易更好。