对结构列表进行排序

问题描述 投票:0回答:3

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

c++ list sorting struct
3个回答
4
投票

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

2
投票
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();

1
投票

以下代码应该可以解决您的问题:

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());
© www.soinside.com 2019 - 2024. All rights reserved.