c++ - 如何在 C++ 中按字母顺序排序

标签 c++ sorting alphabetical

我一直在尝试使用名为姓氏的字符串数据成员对 Employee 的 vector 进行排序。我尝试了几种不同的方法,使用 vector 的排序方法,尝试将我的 vector 转换为列表并使用它的排序,我什至尝试使用字符串比较和 > 运算符,如下所示:

    vector<Employee>sortE(vector<Employee>record)
{
    for (unsigned int i = 0; i < record.size() - 1; i++)
        if (record[i].getLastName() > record[i+1].getLastName())
            swap(record[i], record[i + 1]);
    return record;
}

我想如果我将上述方法与交换功能一起使用,它会起作用。但也许因为 swap 是一个字符串方法,而我正在用 Employees 做它不会正确交换?但我也用我自己的“交换”尝试过,如下所示:

vector<Employee>sortE(vector<Employee>record)
{
    Employee temp;
    for (unsigned int i = 0; i < record.size() - 1; i++)
        if (record[i].getLastName() > record[i + 1].getLastName())
        {
            temp = record[i];
            record[i] = record[i + 1];
            record[i + 1] = temp;
        }

    return record;
}

无论哪种方式,我似乎都无法让它正常工作,我们将不胜感激任何见解或帮助。

最佳答案

如果使用 C++11 或更新版本,您可以尝试使用 lambda(另外,我不知道您的 Employee 类是什么样的,所以我做了一个简单的)。另外,请在此处检查在线执行:http://cpp.sh/6574i

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

class Employee
{
public:
    Employee( const std::string& firstName, const std::string& lastName ) :
        _firstName( firstName ),
        _lastName( lastName )
    {}

    ~Employee()
    {}

    std::string FirstName() const
    { 
        return _firstName;
    }

    std::string LastName() const
    {
        return _lastName;   
    }

    std::string FullName() const
    {
        return _firstName + " " + _lastName;   
    }

private:
    std::string _firstName;
    std::string _lastName;
};

int main()
{
    Employee e1( "Suresh", "Joshi" );
    Employee e2( "Mats", "Sundin" );
    Employee e3( "Steve", "Nash" );
    std::vector< Employee > employees { e1, e2, e3 };

    std::sort(employees.begin(), employees.end(), 
        [](const Employee& lhs, const Employee& rhs) -> bool
        { 
             return rhs.LastName() > lhs.LastName(); 
        });

    for ( auto employee : employees )
    {
        std::cout << employee.FullName() << std::endl;
    }
}

关于c++ - 如何在 C++ 中按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29223287/

相关文章:

c++ - 如何让 C++ 使用我自己的自定义 malloc?

c++ - g++ ld 共享库错误代码:: block

javascript - “unsorting”数组 - 让数组恢复到 .sort javascript 之前的状态

c - 排序链接列表在 C 中无法正常工作

仅反转 R 中字符串中的字母模式

c++ - VS 代码 : cannot jump between header file and related cpp file

c++ - 如何通过它的 id 获取 C++ MFC 控件句柄?

linux - 在不知道文件名的情况下合并排序的文件

php - 在数据集中找到最真实的市场平均价格的算法

string - 如何在 Clojure 中按字母顺序比较两个字符串?