一尘不染

排序向量 按字母顺序

algorithm

我有一个std::vector<Word> data偏离下面的结构:

struct Word
{
    std::string word;
    int line_number;
};

我已经从文件中读取了单词,并将其推入我的向量中,该单词将单词在上面的字符串中以及单词出现的行号存储在一起。现在,我需要按字母顺序对单词进行排序,然后尝试执行以下操作:

    std::sort(data.begin(), data.end());

但是,当我尝试编译以下代码时,我会得到一堆疯狂的错误列表。我相信这是由于排序算法试图将vector.begin()与vector.end()进行比较,但它不知道如何将结构字评估为另一个结构字。

但是我也没有。我对如何比较包含的字符串和向量中的结构感到困惑。


阅读 347

收藏
2020-07-28

共1个答案

一尘不染

在这种情况下,您应该编写一个比较两个Word结构的函数并将该函数传递给std::sort

bool compare_by_word(const Word& lhs, const Word& rhs) {
    return lhs.word < rhs.word;
}

std::sort(data.begin(), data.end(), compare_by_word);

在此问题中,如果您想编写一个通用比较器来基于属性比较对象,则可以找到解决方案。

更新 由于我们已经有一段时间的C 11和C 14了,所以我添加了一个使用lambda的解决方案,因为这可能是更好的做法:

std::sort(data.begin(), data.end(), [](const Word& lhs, const Word& rhs) {
    return lhs.word < rhs.word;
});
2020-07-28