我有一个 C++ 代码,其中有一个结构体和结构体列表。在我的结构中,第一个元素是一个字符串。在结构列表中,如何对结构的第一个元素进行排序,以便排序后列表中的所有元素将按字母顺序排列?
struct samplestruct
{
string Name;
int Number
};
samplestruct obj_samplestruct;
vector<samplestruct> List;
obj_samplestruct.Name = "Tom";
obj_samplestruct.Number = 1;
list.push_back(obj_samplestruct);
obj_samplestruct.Name = "Jerry";
obj_samplestruct.Number = 2;
list.push_back(obj_samplestruct);
obj_samplestruct.Name = "Tom";
obj_samplestruct.Number = 3;
list.push_back(obj_samplestruct);
现在在上面的代码中,如何按照结构中的
Name
进行排序,以便在列表中,成员应按字母顺序排列。
sort
函数需要可以使用两个参数调用并返回 bool 的函数,这可能是一个 lambda 函数:
sort( list.begin( ), list.end( ),
[]( const samplestruct& a, const samplestruct&b ){
return a.Name < b.Name;
} );
默认情况下它会寻找
operator<
,所以这也可以工作:
bool operator<( const samplestruct& a, const samplestruct&b ){
return a.Name < b.Name;
}
sort( list.begin( ), list.end( ) );
struct samplestruct
{
string Name;
int Number;
bool operator<( const samplestruct& a) const {
//just + 'const': maybe patch for the bug of GCC(clang-802.0.42)
return Name < a.Name;
}
};
sort();
以下代码应该可以解决您的问题:
struct samplestruct_lessThan
{
bool operator()(samplestruct const & a, samplestruct const & b) const
{
return a.Name < b.Name;
}
};
std::sort(object.begin(), object.end(), samplestruct_lessThan());