说我有
class newVector: public std::vector<T> {
public:
bool operator< (const newVector& v) {
//..
}
};和
a std::set<newVector>; 我无法使用a.find(.)正确地说,我不知道该把什么放入(.)以便使用newVector::operator<。当我只使用a.find(元素)时,它使用std::less。我是否应该改变性病::少一点?
发布于 2015-07-01 17:20:20
您不需要重载向量,也不需要更改std:less,而是单独定义您自己的std::兼容性较差的函数对象。
#include <iostream>
#include <vector>
#include <set>
using namespace std;
struct OppositeVectorComp
{
template< class T, class Alloc >
bool operator()( const std::vector<T,Alloc>& lhs,const std::vector<T,Alloc>& rhs )
{
return !(lhs < rhs);
}
};
int main() {
std::vector<int> a , b;
std::set<std::vector<int>> defaultset;
std::set<std::vector<int>, OppositeVectorComp> myset;
a.push_back(1);
b.push_back(2);
myset.insert(a);
myset.insert(b);
defaultset.insert(a);
defaultset.insert(b);
std::cout << (*myset.begin())[0] << std::endl; // output 2
std::cout << (*defaultset.begin())[0] << std::endl; // output 1
return 0;
}这里,OppositeVectorComp在向量上定义了一个新的顺序,其中
OppositeVectorComp(a,b) true iff a <b is false通过使用std::set<std::vector<int>, OppositeVectorComp>类型,我们定义了一个使用自定义std::less的集合。
https://stackoverflow.com/questions/31167529
复制相似问题