C++ 我可以根据条件使用不同的lambda调用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

现在我对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 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
对象。是的,在与框架交互时,这可能会使事情复杂化,但希望这只是代码的一小部分,而代码中更大、更重要的部分将被删除我会更容易更好。