问题描述
我有以下C ++类:
class MyClass {
private:
int _id;
unsigned long long _timestamp;
public:
MyClass(int id,unsigned long long ts) : _id(id),_timestamp(ts) {}
bool operator<(const MyClass& other) const { return _timestamp < other._timestamp; }
int GetID() {return _id;}
};
class MyClass1 {
private:
map<int,multiset<MyClass>> _list;
public:
vector<int> GetMyClasses(int id,int count) {
vector<int> result;
transform(_list[id].rbegin(),_list[id].rbegin() + count,back_inserter(result),[](const MyClass& c) {return c.GetID();});
return result;
}
};
这是构建错误:
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xutility(1915,41): error C2676: binary '-': 'const _BidIt' does not define this operator or a conversion to a type acceptable to the predefined operator
我正在使用VS2019版本16.7.7。任何见解和建议都将受到赞赏。
解决方法
您不能通过简单的+
使多重集的迭代器递增。
使用std::advance来做到这一点:
auto it = _list[id].rbegin();
auto it2 = it;
std::advance(it2,count);
transform(it,it2,back_inserter(result),[](const MyClass& c) {return c.GetID();});
GetID
也必须是const
方法。