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)
| 归档时间: |
|
| 查看次数: |
11672 次 |
| 最近记录: |