Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;列表::按成员对类进行排序_C++_List_Sorting_Categories_Member - Fatal编程技术网

C++ C++;列表::按成员对类进行排序

C++ C++;列表::按成员对类进行排序,c++,list,sorting,categories,member,C++,List,Sorting,Categories,Member,如何按某个成员变量对类列表进行排序 class Klasse { int _a; int _b; } ... list<Klasse> liste; liste.sort(); // sorts by _a liste.sort(?); // how to sort by _b now? CLASSE类{ 国际组织; int_b; } ... 列表列表; liste.sort();//按a排序 列表排序(?);//现在如何按b排序? 是的,您所要做的就是实现一个比

如何按某个成员变量对类列表进行排序

class Klasse {
  int _a;
  int _b;

}

...
list<Klasse> liste;
liste.sort();   // sorts by _a
liste.sort(?);  // how to sort by _b now?
CLASSE类{
国际组织;
int_b;
}
...
列表列表;
liste.sort();//按a排序
列表排序(?);//现在如何按b排序?

是的,您所要做的就是实现一个比较器类,或者重载比较
Klasse::operator是的,您所要做的就是实现一个比较器类,或者重载比较
Klasse::operator您将使用的。下面是一个使用的示例

std::列表列表;
liste.sort([](Klasse const&lhs、Klasse const&rhs){
返回左侧。_b<右侧。_b;
});
您将使用一个。下面是一个使用的示例

std::列表列表;
liste.sort([](Klasse const&lhs、Klasse const&rhs){
返回左侧。_b<右侧。_b;
});

您应该在链接中编写自己的比较器、示例和用法;)

下面是承诺的代码示例

(感谢建设性的批评)

bool compare_by_b(常数Klasse&first,常数Klasse&second)
{
先返回。_b<第二。_b;
}
排序(按b比较);

您应该在链接中编写自己的比较器、示例和用法;)

下面是承诺的代码示例

(感谢建设性的批评)

bool compare_by_b(常数Klasse&first,常数Klasse&second)
{
先返回。_b<第二。_b;
}
排序(按b比较);

您可以编写一个比较函数——基本上是可以使用列表元素类型的两个参数调用的任何函数,该调用返回的值可转换为
bool
。这种“任何东西”可以是lambda、函数对象,也可以只是函数:

bool klasse_sort_by_b(const Klasse& l, const Klasse& r)
{
    return l._b < r._b;
}

liste.sort(klasse_sort_by_b);
bool klasse_sort_by_b(const klasse&l,const klasse&r)
{
返回l.(u b

您可以编写一个比较函数——基本上是可以使用列表元素类型的两个参数调用的任何函数,该调用返回的值可转换为
bool
。这种“任何东西”可以是lambda、函数对象,也可以只是函数:

bool klasse_sort_by_b(const Klasse& l, const Klasse& r)
{
    return l._b < r._b;
}

liste.sort(klasse_sort_by_b);
bool klasse_sort_by_b(const klasse&l,const klasse&r)
{
返回l.(u b
您需要此排序实现:

template<typename Compare>    
void sort (Compare comp);
模板
无效排序(比较comp);
然后传入一个比较函数,如:

bool compareByA( const Klasse& first, const Klasse& second ){
 return first._a < second._a;
}
bool compareByA(康斯特克拉斯&第一,康斯特克拉斯&第二){
先返回。_a<第二。_a;
}
那就叫它:

std::list<Klasse> lst;
...
lst.sort(compareByA);
lst.sort(compareByB);
std::list lst;
...
一级排序(compareByA);
一级排序(compareByB);

您需要此排序实现:

template<typename Compare>    
void sort (Compare comp);
模板
无效排序(比较comp);
然后传入一个比较函数,如:

bool compareByA( const Klasse& first, const Klasse& second ){
 return first._a < second._a;
}
bool compareByA(康斯特克拉斯&第一,康斯特克拉斯&第二){
先返回。_a<第二。_a;
}
那就叫它:

std::list<Klasse> lst;
...
lst.sort(compareByA);
lst.sort(compareByB);
std::list lst;
...
一级排序(compareByA);
一级排序(compareByB);

您试过吗?试过吗?C++11或更高版本?如果你的编译器支持这些东西,它们就很棒了。这很不错(C+11:)不错!顺便说一下,lambda不是C++中新的人会容易理解的东西,所以这可能不是最好的答案而不需要进一步的引用。C++ 11或更高版本。如果你的编译器支持这些东西,它们就很棒了。这很不错(C+11:)不错!顺便说一下,lambda不是C++中新的人会容易理解的,所以这可能不是最好的答案而不需要进一步的引用。你应该在答案中包含代码而不是链接到外部资源。他回答问题(虽然很快),并给出了一个参考。可能不是最彻底的解释,但比否决票更有价值@马库斯穆勒:我同意,但他不只是联系到某个地方。他说“写一个比较器”,这是绝对正确的,如果链接的站点在某一点上崩溃,甚至可能足以让OP开始。你应该在答案中包含代码,而不是链接到外部资源。他回答了这个问题(虽然很快),并给出了参考。可能不是最彻底的解释,但比否决票更有价值@马库斯穆勒:我同意,但他不只是联系到某个地方。他说“写一个比较器”,这是绝对正确的,如果链接站点在某一点上崩溃,甚至可能足以让OP开始。