## Linux compilation > mkdir build > cd build > cmake -DCMAKE_BUILD_TYPE=Debug .. > make ## Exercise 1 Write a template class `VectorMap` that represents an over-engineered `std::map`. Inside, it should hold 2 `std::vectors` of the same size, each with different types. The first vector should hold keys, the other one values. Elements at the same position in both vectors should create a pair like `1` and `'c'` below. ```c++ VectorMap map; map.insert(1, 'c'); map[1] = 'e'; // replaces value under 1 std::cout << map[1]; // prints 'e' map.at(2); // throw std::out_of_range ``` Implement the mentioned above `insert()`, `operator[]`, `at()` methods. Do not bother about duplicated keys for now. You can also try to implement additional methods from the `std::map` interface 🙂 Use [cppreference](http://en.cppreference.com/w/cpp/container/map). ## Exercise 2 - `static_assert` Add a constraint to our `VectorMap`. Do not allow to create an object when `ValueType` does not have a default constructor. Use `static_assert` and proper trait from [``](https://en.cppreference.com/w/cpp/types#Type_traits) library. Check if it works properly. ## Exercise 3 - `isIntKey()` Write a function `isIntKey()` in `VectorMap`. It should return `true` when the KeyType is `int` and `false` otherwise. Check the [``](https://en.cppreference.com/w/cpp/types#Type_traits) library for some inspiration 🙂 # Exercie 4 Write a partial specialization of `VectorMap` for boolean keys. We can have only 2 values for boolean keys. There is no need to keep vectors inside. Implement properly all currently available functions. # Exercie 5 Write a variable template `is_int_key_v`. It should return a value of the `is_int_key` field in a given template type.