按字母顺序对矢量<Struct>进行排序

Nic*_*ung 5 c++ sorting string algorithm vector

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

struct Word
{
    std::string word;
    int line_number;
};
Run Code Online (Sandbox Code Playgroud)

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

    std::sort(data.begin(), data.end());
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译以下内容时,我会得到一个疯狂的错误列表.我相信这是由于sort算法试图将vector.begin()与vector.end()进行比较,但它不知道如何将struct word计算为另一个struct word.

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

Bjö*_*lex 21

在这种情况下,您应该编写一个比较两个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);
Run Code Online (Sandbox Code Playgroud)

这个问题中,如果要编写一个通用比较器来根据属性比较对象,可以找到解决方案.

更新既然我们已经有了一段时间的C++ 11和C++ 14,我正在使用lambda添加一个解决方案,因为这可能是现在更好的做法:

std::sort(data.begin(), data.end(), [](const Word& lhs, const Word& rhs) {
    return lhs.word < rhs.word;
});
Run Code Online (Sandbox Code Playgroud)


ami*_*mit 5

你应该实施operator<你的struct Word

  • 只有在您进行比较时才能比较此类对象的标准方法.如果是特殊情况,应首选自由函数或函子. (3认同)