排序结构列表

时间:2014-01-20 12:03:04

标签: c++

您好我有一个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排序,以便在列表中成员应按字母顺序排列..

3 个答案:

答案 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();