排序向量 按字母顺序

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

struct Word

{

std::string word;

int line_number;

};

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

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

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

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

回答:

在这种情况下,您应该编写一个比较两个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;

});

以上是 排序向量 按字母顺序 的全部内容, 来源链接: utcz.com/qa/400207.html

回到顶部