没有用于调用 sort() 的匹配函数
no matching function for call to sort()
我正在通过编程:使用C++的原则和实践(第 2 版)自学,我在向量部分。我可以复制并粘贴他们的代码,但它仍然不起作用。我的代码如下。
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
int main()
{
cout << "Please enter the temperatures for the last five daysn";
vector<double> temperatures;
for(double temp; cin >> temp;){
temperatures.push_back(temp);
}
double sum = 0;
for (double temp : temperatures){
sum += temp;
}
cout << "Mean temperature is " <<(sum / temperatures.size()) << endl;
sort(temperatures);
cout << "Median temperature is " << temperatures[temperatures.size()/2];
}
感谢帮助,解释更好。
模板函数std::sort
需要一对迭代器作为其参数(即范围)和可选的比较器。没有可以直接应用于容器的sort
函数。你从哪里得到称之为sort(temperatures)
的想法?要对整个temperatures
向量进行排序,应将其称为 std::sort(temperatures.begin(), temperatures.end())
。我相信这本书有相当多的例子可以相当清楚地证明这一点。
此外,标准库头通常应作为#include <algorithm>
包含在内,即使用<...>
语法,而不是"..."
语法。
首先,您应该更正此问题:
#include "iostream"
#include "vector"
#include "algorithm"
对此:
#include <iostream>
#include <vector>
#include <algorithm>
现在,有两个版本的std::sort
如下:
-
void sort( RandomIt first, RandomIt last );
-
void sort( RandomIt first, RandomIt last, Compare comp );
第一个采用两个随机迭代器,例如:
std::vector<int> vec {5,4,3,2,1};
std::sort(vec.begin(), vec.end());
默认情况下,这将按升序对元素进行排序。
排序的第二个版本有一个附加参数,允许您使用自己的比较函数对元素进行排序,函数必须返回布尔值。
例:
bool comp(const int &a, const int &b)
{
return a > b;
}
并调用排序:std::sort(vec.begin(), vec.end(), comp);
将按降序对它们进行排序。
Lambda 经常被用来代替比较函数,可以这样做:
std::sort(vec.begin(), vec.end(), [](const int &a, const int &b) {return a < b;});
顺便说一下,要获得"std_lib_facilities.h":
- http://www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h
- 将文本复制到文本编辑器中并将文件另存为 std_lib_facilities.h,并将其包含在项目中:
-
#include "std_lib_facilities.h"
首先,关于标题,本书中的代码需要标题"std_lib_facilities.h",可以在本书的支持网站上找到,并在本书的附录C中将标题集成到您的项目中。
在代码中,他做到了: #include "std_lib_facilities.h"
项目中用户定义的标题的正确方法,但以这种方式包含标准库标题是完全错误的。标准库标头必须使用#include <...>
表示法包含在内。在他的书中,他从未包含带有#include "..."
符号的标准库标题。
现在,关于种类(温度)的实际问题,这个版本的sort()在他自己的头文件"std_lib_facilities.h"中可用,使初学者在早期阶段不知道迭代器的技术细节的情况下可以轻松使用sort()。
因此,要使用该版本的排序,要么#include "std_lib_facilities.h"
,要么使用其他版本的排序,其中之一是:
sort(temperatures.begin(), temperatures.end());
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- cv2有什么区别.StereoSGBM_create() 和 cv2.StereoBM_create() 函数用于 Op
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- Qt中是否有QLabel::setScaledContent等效函数用于QGraphicsScene?
- 递归函数用于计算 n 个数字之和的意外输出
- 替换(或重新实现?)std::函数用于某些统计和测试
- 如何将成员函数用于同一类的不同对象
- 为什么lambda函数用于stl函数,例如sort(),c 中的max_element()函数以两个参数为输入
- 如何在 Cython 中将C++中的模板化函数用于两种类型
- 编译库的C 挂钩函数用于调试
- 在已发布的结构中添加构造函数(用于 memcpy)是否安全?
- 没有匹配的构造函数用于初始化模板化类的构造函数
- C 无匹配函数用于呼叫错误(默认为参考通过)
- 没有匹配函数用于调用 std::transform,未解析的重载函数类型
- 函数用于随机数(C++11)
- 是否有一个函数用于遍历POSIX环境变量
- “没有匹配的构造函数用于初始化”与矢量
- 函数用于C样式字符串和C++std::string
- 有选择地内联函数(用于调试目的)
- 两个模板函数用于两种标准类型