我想使用set<vector<data>>,其中data是用户定义的类,set和vector都是STL,
class data
{
int info;
}; 我无法理解是需要为vector<data>和data类定义比较器运算符还是只为data类定义比较器运算符。我们如何定义相同的比较器运算符呢?
发布于 2016-10-14 07:01:54
std::vector已经有了一个顺序--字典顺序--所以你通常不需要对它做任何事情。
如果使用默认的向量排序,则始终需要为自己的类定义排序(不需要的情况请参见下面的示例),最常见的方法是重载operator<。
注意,排序关系必须是一个严格弱序,或者使用该集合是未定义的。
如果您想要一种特殊的“平等”感的集合,您需要定义自己的。
例如,此代码将生成一个集,其中长度相同的向量被视为相等(因此,在集合中只添加了每个长度中的第一个):
template<typename T>
struct shorter_vector
{
bool operator() (const std::vector<T>& left, const std::vector<T>& right) const
{
return left.size() < right.size();
}
};
// ...
struct A { int x; };
std::set<std::vector<A>, shorter_vector<A>> samelengths;
samelengths.insert({A{1}});
samelengths.insert({A{2}});
samelengths.insert({A{3},A{4}});
samelengths.insert({A{5},A{67}});
// set now contains {A{1}} and {A{3},A{4}}注意,这个集合不需要对向量的元素排序,因为等价关系仅在结构上定义。
https://stackoverflow.com/questions/40036362
复制相似问题