我有一个std::vector<Word> data偏离下面的结构:
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。
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; });