diff --git a/C++/Rank-Transform-of-an-Array.cpp b/C++/Rank-Transform-of-an-Array.cpp
new file mode 100644
index 00000000..c0416155
--- /dev/null
+++ b/C++/Rank-Transform-of-an-Array.cpp
@@ -0,0 +1,31 @@
+#include <vector>
+#include <algorithm>
+#include <unordered_map>
+
+class Solution {
+public:
+    std::vector<int> arrayRankTransform(std::vector<int>& arr) {
+        // Step 1: Create a copy of the array and sort it
+        std::vector<int> sortedArr = arr;
+        std::sort(sortedArr.begin(), sortedArr.end());
+
+        // Step 2: Create a map to hold the rank of each unique element
+        std::unordered_map<int, int> rankMap;
+        int rank = 1;
+
+        // Assign ranks, skipping duplicates
+        for (int i = 0; i < sortedArr.size(); ++i) {
+            if (rankMap.find(sortedArr[i]) == rankMap.end()) {
+                rankMap[sortedArr[i]] = rank++;
+            }
+        }
+
+        // Step 3: Replace elements in the original array with their ranks
+        std::vector<int> result(arr.size());
+        for (int i = 0; i < arr.size(); ++i) {
+            result[i] = rankMap[arr[i]];
+        }
+
+        return result;
+    }
+};
\ No newline at end of file