您好我有一个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排序,以便在列表中成员应按字母顺序排列..
答案 0 :(得分:1)
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( ) );
答案 1 :(得分:0)
以下代码可以解决您的问题:
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());
答案 2 :(得分:0)
其他
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();