首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >排序()错误,即使包括<algorithm>

排序()错误,即使包括<algorithm>
EN

Stack Overflow用户
提问于 2021-07-07 09:32:17
回答 2查看 123关注 0票数 1

我还从编程原则和实践中复制了精确的代码,但没有效果。当我尝试使用std::sort(word)sort(word)时,会收到一条错误消息

代码语言:javascript
运行
复制
<source>: In function 'int main()':
<source>:13:14: error: no matching function for call to 'sort(std::vector<std::__cxx11::basic_string<char> >&)'
   13 |     std::sort(words);
      |     ~~~~~~~~~^~~~~~~
[...]

守则:

代码语言:javascript
运行
复制
#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<std::string> words;
    for(std::string temp; std::cin >> temp;){
        words.push_back(temp);
    }
    std::cout << "Number of words: " << words.size() << "\n";

    std::sort(words);

     for(int i=0; i < words.size(); i++){
        if(i == 0; words[i-1]!=words[i]){
            std::cout << words[i] << "\n";
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-07 09:41:41

代码中有两个问题:

  1. 你对sort的用法是错误的,是std::sort(words.begin(), words.end())。这应该写在你的书里或者你的学习材料里。--

在第一次迭代期间,

  1. in if (i == 0; words[i-1]!=words[i])是0,因此您访问的是超出界限的words[-1],它最多只会触发一些错误消息。;在这里也没有意义。--

你可能想要这个:

代码语言:javascript
运行
复制
  for (size_t i = 0; i < words.size() - 1; i++) {
    if (words[i] != words[i + 1]) {
      std::cout << words[i] << "\n";
    }
  }
票数 3
EN

Stack Overflow用户

发布于 2021-07-07 09:57:04

排序函数接受2个或3个变量。前2种是用于开始和结束索引。在本例中,它们是words.begin()和words.end()

因此,您的第13行(有错误)应该是:

代码语言:javascript
运行
复制
std::sort(words.begin(),words.end());

第三个参数可以用来指定排序的类型。例如,

代码语言:javascript
运行
复制
std::sort(words.begin(),words.end(),greater<int>());

将向量按反向顺序排序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68283467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档