假设我std::vector<Point>
Point
为struct Point { double x; double y;}
std::map
我想将这样的矢量分成组(桶),其中同一桶中的所有点在彼此之间具有相同的欧几里德范数(例如,dist(PointA,PointB)== X,其中X是常数)。我已经决定使用struct ClosePoints
{
bool operator()(Point const& A, Point const& B) const
{
bool same = dist(A,B) < x;
//If not close enough use lexical sort
return same ? false : std::tie(A.x, A.y) < std::tie(B.x,);
}
}
来完成自定义排序运算符的任务:
std::map<Point, std::list<Point>, ClosePoints> map;
for(const auto& p : pointsVector)
map[p].push_back(p);
分区代码:
X
经过一些测试和印刷后,我注意到一些符合Euclidean范数限制import UIKit
import GoogleMobileAds
class ViewController: UIViewController {
var banner : GADBannerView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
loadBanner()
}
func loadBanner(){
banner = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)
banner.adUnitID = "my_app_id"
banner.rootViewController = self
let req : GADRequest = GADRequest()
banner.loadRequest(req)
banner.frame = CGRectMake(0, view.bounds.height - banner.frame.size.height, banner.frame.size.width, banner.frame.size.height)
self.view.addSubview(banner)
}
的点在不同的桶中结束。
我无法弄清楚为什么会如此?
答案 0 :(得分:2)
问题是您定义的比较运算符不提供等价关系。例如,您可以使B点接近A和C,但A点和C点可能相距很远。因此,如果你将B与A和C进行比较,你将把它们放在与B相同的篮子中。但是,如果你首先击败A和C,结果将是不可预测的。