我的问题基本上与[1]相同,但挑战在于比较嵌套的vector<vector<double>>
。
作为我面临的问题的背景:我有一个基于std::set的n路索引,其中的项主要按时间排序,其次按几何排序。也就是说,相等的多边形应该有相同的索引,但它们的实际顺序实际上并不重要。重要的是,在这种情况下,less-comparator必须是稳定的,也就是说,当一个项既不小于也不大于时,它必须被视为相等。
因此,vector<vector<double>>
表示具有可选洞的多边形(第一个向量是外环,任何后续向量都是洞)。
[1][how to define a comparison operator (less than) on array of doubles?](https://stackoverflow.com/questions/53637613/how-to-define-a-comparison-operator-less-than-on-array-of-doubles)
编辑:这个问题不是问如何实现小于运算符,而是如标题所示,关于如何通过使用小于比较来比较给定的双精度向量与另一个向量...这是一个更具挑战性的问题...
这个问题可以用不同的方法来解决,但是我特别寻找一个解决方案,它允许使用对象(几何体)作为具有多个绑定索引属性的集合的一部分。
2条答案
按热度按时间qkf9rpyu1#
你真的需要更多的类型
从
=default
开始,对这些类型使用operator<=>
,并检查我们希望相等的情况是否被视为相等。在这一点上,如果每个点都以相同的顺序匹配,那么一个多边形就等于另一个多边形。如果你要求只在起始点不同的多边形被视为相等,事情会变得更困难。如果是这样的话,我建议你规范所有多边形从最低点开始。
如果你不能改变几何体,你可以在每次比较时找到规范的起点,然后做一个
std::lexicographic_compare
s. N. b的序列。由于大小检查,这是一个不同于首先规范化的总顺序。dffbzjpn2#
你需要做的就是创建一个自由函数
operator<
,它将两个vector<vector<double>>
当作const&
: