排序向量 按字母顺序
我有一个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