【问题标题】:vector uniqueness in C++C++中的向量唯一性
【发布时间】:2012-10-10 21:05:13
【问题描述】:

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

答案很有帮助地指出,对于自定义类,您需要实现 operator

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

【问题讨论】:

    标签: vector stdset


    【解决方案1】:

    std::set 可以接受任何实现严格弱比较的比较类作为其第二个模板参数,它不必是“

    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;
      } 
    
    };
    

    【讨论】:

    • 从编程和数学的角度来看,这都是有道理的。很明显,您使用的
    • 是的,但 是不是仍然习惯于(间接地)确定相等性,从而确定唯一性?另外,给定示例中的代码如何与实际使用 set 的代码一起工作?
    • 你可以这样声明集合:std::set item( Compare( ) );
    • std::set 需要的不仅仅是相等,它需要一个明确定义的顺序。这就是为什么比较器默认为小于运算符的原因,如果您的类不能提供有意义的排序(通过任何方式),那么它不能在 std::set(或 std::map)中使用,在这种情况下考虑 std:: unordered_set。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2020-05-29
    • 2019-09-25
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多