分区std :: 2D点的矢量

时间:2016-07-28 16:02:30

标签: c++ algorithm c++11

假设我std::vector<Point> Pointstruct 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) } 的点在不同的桶中结束。 我无法弄清楚为什么会如此?

1 个答案:

答案 0 :(得分:2)

问题是您定义的比较运算符不提供等价关系。例如,您可以使B点接近A和C,但A点和C点可能相距很远。因此,如果你将B与A和C进行比较,你将把它们放在与B相同的篮子中。但是,如果你首先击败A和C,结果将是不可预测的。