summaryrefslogtreecommitdiff
path: root/graphs/cpp/closer_to
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
commitc9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch)
tree3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /graphs/cpp/closer_to
add: graphs et rushs
Diffstat (limited to 'graphs/cpp/closer_to')
-rw-r--r--graphs/cpp/closer_to/closer_to.cc15
-rw-r--r--graphs/cpp/closer_to/closer_to.hh11
-rw-r--r--graphs/cpp/closer_to/closer_to_test.cc29
3 files changed, 55 insertions, 0 deletions
diff --git a/graphs/cpp/closer_to/closer_to.cc b/graphs/cpp/closer_to/closer_to.cc
new file mode 100644
index 0000000..779d3b5
--- /dev/null
+++ b/graphs/cpp/closer_to/closer_to.cc
@@ -0,0 +1,15 @@
+//
+// Created by martial.simon on 2/25/25.
+//
+#include "closer_to.hh"
+CloserTo::CloserTo(int i)
+ : i_{ i }
+{}
+bool CloserTo::operator()(int a, int b) const
+{
+ const int da = a - i_ >= 0 ? a - i_ : i_ - a;
+ const int db = b - i_ >= 0 ? b - i_ : i_ - b;
+ if (da == db)
+ return a < b;
+ return da < db;
+} \ No newline at end of file
diff --git a/graphs/cpp/closer_to/closer_to.hh b/graphs/cpp/closer_to/closer_to.hh
new file mode 100644
index 0000000..a2462ca
--- /dev/null
+++ b/graphs/cpp/closer_to/closer_to.hh
@@ -0,0 +1,11 @@
+#pragma once
+
+struct CloserTo
+{
+ CloserTo(int i);
+
+ bool operator()(int a, int b) const;
+
+private:
+ int i_;
+};
diff --git a/graphs/cpp/closer_to/closer_to_test.cc b/graphs/cpp/closer_to/closer_to_test.cc
new file mode 100644
index 0000000..0edfd5e
--- /dev/null
+++ b/graphs/cpp/closer_to/closer_to_test.cc
@@ -0,0 +1,29 @@
+#include <algorithm>
+#include <iostream>
+#include <vector>
+
+#include "closer_to.hh"
+
+void print_elt(int i)
+{
+ std::cout << ' ' << i;
+}
+
+int main()
+{
+ auto v = std::vector<int>{ 1, 2, 3, 4, 5 };
+
+ std::cout << "Unsorted vector:";
+ std::for_each(v.begin(), v.end(), print_elt);
+ std::cout << '\n';
+
+ auto n = 3;
+
+ std::sort(v.begin(), v.end(), CloserTo(n));
+
+ std::cout << "Sorted vector closed to " << n << ':';
+ std::for_each(v.begin(), v.end(), print_elt);
+ std::cout << '\n';
+
+ return 0;
+}