From dc6995fa8d997d23f8ba9e4d4b5401c0ab7782b7 Mon Sep 17 00:00:00 2001 From: Sebastian Sosnowski Date: Wed, 11 Mar 2026 20:56:43 +0100 Subject: [PATCH] Implement Transform function The function removes duplicates from both containers and then return output as map. STL functions sort, unique and erase are used to remove duplicates from both containers. Transform with vector are used to prepare pairs of values, which then are inserted to result map. --- homework/transform-containers/CMakeLists.txt | 5 +++-- homework/transform-containers/main.cpp | 5 +++++ homework/transform-containers/test.cpp | 1 + .../transform_containers.cpp | 19 +++++++++++++++++++ .../transform_containers.hpp | 10 ++++++++++ 5 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 homework/transform-containers/main.cpp create mode 100644 homework/transform-containers/transform_containers.cpp create mode 100644 homework/transform-containers/transform_containers.hpp diff --git a/homework/transform-containers/CMakeLists.txt b/homework/transform-containers/CMakeLists.txt index 1c924a028..d04a46e1f 100644 --- a/homework/transform-containers/CMakeLists.txt +++ b/homework/transform-containers/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.11.0) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FetchContent) @@ -18,7 +18,8 @@ FetchContent_MakeAvailable(googletest) project(transformContainers) enable_testing() -add_executable(${PROJECT_NAME}-ut test.cpp) # add your cpp file here after test.cpp +add_executable(${PROJECT_NAME} main.cpp) +add_executable(${PROJECT_NAME}-ut test.cpp transform_containers.cpp) # add your cpp file here after test.cpp # if this is problematic take a look into CMakeLists.txt files in other exercises add_compile_options(${PROJECT_NAME}-ut -Wall -Wextra -Wconversion -pedantic -Werror) diff --git a/homework/transform-containers/main.cpp b/homework/transform-containers/main.cpp new file mode 100644 index 000000000..7c7ec34fb --- /dev/null +++ b/homework/transform-containers/main.cpp @@ -0,0 +1,5 @@ +#include "transform_containers.hpp" + +int main() { + return 0; +} \ No newline at end of file diff --git a/homework/transform-containers/test.cpp b/homework/transform-containers/test.cpp index 3f6e9c0c8..70cc3ee20 100644 --- a/homework/transform-containers/test.cpp +++ b/homework/transform-containers/test.cpp @@ -1,6 +1,7 @@ #include "gtest/gtest.h" // TODO: add proper includes +#include "transform_containers.hpp" TEST(transformContainerTests, ShouldReturnUniqueMap) { std::map expected_result{ diff --git a/homework/transform-containers/transform_containers.cpp b/homework/transform-containers/transform_containers.cpp new file mode 100644 index 000000000..bf2bf59e0 --- /dev/null +++ b/homework/transform-containers/transform_containers.cpp @@ -0,0 +1,19 @@ +#include "transform_containers.hpp" + +std::map removeDuplicateAndTranformToMap(std::list words, std::deque nums) { + std::map transformed{}; + + std::ranges::sort(nums); + auto new_end = std::unique(nums.begin(), nums.end()); + nums.erase(new_end, nums.end()); + + words.sort(); + words.unique(); + + std::vector> temp; + temp.reserve(std::min(nums.size(), words.size())); + auto f = [](int num, std::string& word) { return std::make_pair(num, word); }; + std::transform(nums.begin(), nums.end(), words.begin(), std::back_inserter(temp), f); + transformed.insert(temp.begin(), temp.end()); + return transformed; +} \ No newline at end of file diff --git a/homework/transform-containers/transform_containers.hpp b/homework/transform-containers/transform_containers.hpp new file mode 100644 index 000000000..3931862bc --- /dev/null +++ b/homework/transform-containers/transform_containers.hpp @@ -0,0 +1,10 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include + +std::map removeDuplicateAndTranformToMap(std::list list, std::deque deque); \ No newline at end of file