Request Short Link
C++ 98
C++ 11
C++ 14
C++ 17
C++ 20
C++ 23
C++ 2c
for-loops as while-loops
array subscription
Show all implicit casts
Show all template parameters of a CallExpr
Use libc++
Transform std::initializer_list
Show noexcept internals
Show padding information
Show coroutine transformation
Show C++ to C transformation
Show object lifetime
Default
15
18
20
22
26
More
GitHub
Patreon
Issues
About
Policies
Examples
C++ Insights @ YouTube
Settings
Version
New C++ Insights Episode
×
Made by
Andreas Fertig
Powered by
Flask
and
CodeMirror
Source:
#include <cstdio> #include <algorithm> #include <iostream> #include <queue> #include <utility> #include <vector> #include <queue> using Point = std::pair<int, int>; auto knn(const std::vector<Point>& points, const Point& origin, const int k) -> std::vector<Point> { auto squared_distance = [&origin](const Point& p) { const int dx = std::get<0>(p) - std::get<0>(origin); const int dy = std::get<1>(p) - std::get<1>(origin); return dx*dx + dy*dy; }; auto closer = [&squared_distance](const Point& p1, const Point& p2) { return squared_distance(p1) > squared_distance(p2); }; std::priority_queue<Point, std::vector<Point>, decltype(closer)> queue(closer); for (const auto& point : points) { queue.push(point); } std::vector<Point> nearest_neighbours; for (int i = 0; i < k; ++i) { nearest_neighbours.emplace_back(std::move(queue.top())); queue.pop(); } return nearest_neighbours; } int main() { }
Insight:
Console: