Vector C+中的向量唯一性+;

Vector C+中的向量唯一性+;,vector,stdset,Vector,Stdset,这是我的后续文章,我想知道在std::set中存储非重复任意数据的最有效方法 答案很有帮助地指出,对于自定义类,您需要实现操作符

这是我的后续文章,我想知道在std::set中存储非重复任意数据的最有效方法

答案很有帮助地指出,对于自定义类,您需要实现操作符<(如果我理解正确的话)


然而,我的特定数据类型是一个向量(在数学意义上)。我想做的是只在集合中存储一个不存在的新向量。为此,如何实现两个向量之间的小于运算符?当有3个正交维度进行比较时,这似乎没有意义。我可以使用什么策略来执行此操作?

std::set可以接受任何实现严格弱比较的比较类作为其第二个模板参数,它不必是“std::set可以接受任何实现严格弱比较的比较类作为其第二个模板参数,它不必是“从编程和数学的角度来看,这都是有意义的”。很明显,<您使用的只用于使集合工作,并不意味着对具有任何“好的”数学属性的数学向量进行排序。是的,但是,<尽管如此,它不是用来(间接)确定相等性,从而确定唯一性吗?另外,给定示例中的代码如何与实际使用set的代码一起工作?可以这样声明set:std::setitem(Compare());set需要的不仅仅是相等,它还需要定义良好的顺序。这就是比较器默认为小于运算符的原因,如果您的类不能提供有意义的排序(以任何方式),那么它就不能用于STD::SET(或STD::MAP),在这种情况下,考虑STD::unOrdEdjSt.这从编程和数学的角度都是有意义的。很明显,<您使用的只用于使集合工作,并不意味着对具有任何“好的”数学属性的数学向量进行排序。是的,但是,<尽管如此,它不是用来(间接)确定相等性,从而确定唯一性吗?另外,给定示例中的代码如何与实际使用set的代码一起工作?可以这样声明set:std::setitem(Compare());set需要的不仅仅是相等,它还需要定义良好的顺序。这就是比较器默认为小于运算符的原因,如果您的类不能提供有意义的排序(以任何方式),那么它不能用于STD::SET(或STD::MAP),在这种情况下,考虑STD::unOrdEdTySt.
struct Compare {

  bool operator( )( const T& left, const T& right ) const {
    if ( left.dimension1 < right.dimension1 ) return true; 
    if ( left.dimension2 < right.dimension2 ) return true; 
    return left.dimension3 < right.dimension3;
  } 

};