#include <vector>
#include <unordered_map>

template <typename K, typename... TArgs, template<typename...> class TContainer>
std::vector<K> getKeys(const TContainer<K, TArgs...>& mMap)
{
    std::vector<K> result;
    for (auto p : mMap)
        result.push_back(p.first);
    return result;
}

template <typename Container>
auto getKeys2(const Container& mMap) -> std::vector<typename Container::key_type>
{
    std::vector<typename Container::key_type> result;
    for (auto p : mMap)
        result.push_back(p.first);
    return result;
}

int main()
{
    std::unordered_map<int, int> m;
    m[1] = 4;
    m[2] = 7;
    std::vector<int> keys = getKeys(m);
    std::vector<int> keys2 = getKeys2(m);
}