【发布时间】:2017-11-15 21:41:07
【问题描述】:
我想使用const 成员变量对包含类对象的向量进行排序。
不幸的是,我收到一条错误消息,指出 “没有用于调用“swap”的匹配函数”。
当我删除 id 的 const 关键字时,std::sort() 可与重载的 operator<() 和自定义比较函数一起使用。
为什么会这样?我一般不能对属于具有 const 成员变量的类的对象进行排序吗?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct A
{
const int id;
A(int id) : id(id) {}
bool operator<(const A &other) const
{
return id < other.id;
}
};
bool cmp(const A &lhs, const A &rhs)
{
return lhs.id < rhs.id;
}
int main()
{
vector<A> vec;
vec.emplace_back(3);
vec.emplace_back(0);
vec.emplace_back(2);
vec.emplace_back(1);
std::sort(vec.begin(), vec.end());
std::sort(vec.begin(), vec.end(), cmp);
}
【问题讨论】:
-
@EvanTeran
A具有复制和移动构造函数。std::swap的问题在于赋值运算符。 -
@aschepler 感谢您的更正。在将我的评论转换为答案时,我确保它是正确的:-)
-
A(int id) : id(id) {}这不是个好主意 -
@Slava 为什么不呢?