我想对一个带有const
成员变量的类的对象进行排序
不幸的是,我收到一条错误消息,指出"没有匹配函数可以调用" swap"" 。
当我删除 const
的id
关键字时,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);
}
答案 0 :(得分:4)
那么,实现排序的方式是它将根据需要交换对象。具有const成员且没有复制或移动赋值运算符的类不会是&#34;可交换&#34;。
我可能会将id
成员设为private和non-const。然后我通过getter访问它(但不提供setter)。使其成为逻辑上的常量,但该类可以复制。
这样的事情:
class A {
public:
A(int id) : id_(id) {}
bool operator<(const A &other) const {
return id_ < other.id_;
}
int id() const { return id_; }
private:
int id_;
};