CS35 Dictionary Implementation using STL map

stlHashTable.h
#pragma once 
/* Copyright (c) 2018
   Swarthmore College Computer Science Department, Swarthmore PA
   A. Danner, M. Gagne, J. Brody, Z. Palmer, A. Soni, L. Meeden
   Distributed as course material for Spring 2018
   CPSC 035: Data Structures and Algorithms
 */

#include <unordered_map>
#include <stdexcept>
#include <vector>

#include <cs35/dictionary.h>

using std::runtime_error;
using std::unordered_map;
using std::vector;

template <typename K, typename V>
class STLHashTable : public Dictionary<K,V> {
public:
    int getSize();
    bool isEmpty();
    void insert(K key, V value);
    void update(K key, V value);
    V get(K key);
    bool contains(K key);
    void remove(K key);
    std::vector<K> getKeys();
    std::vector<pair<K,V>> getItems();
private:
    unordered_map<K,V> actualDictionary;
};

template <typename K, typename V>
int STLHashTable<K,V>::getSize() {
    return this->actualDictionary.size();
}

template <typename K, typename V>
bool STLHashTable<K,V>::isEmpty() {
    return this->actualDictionary.empty();
}

template <typename K, typename V>
void STLHashTable<K,V>::insert(K key, V value) {
    if (this->contains(key)) {
        throw runtime_error("STLHashTable::insert: key already present");
    }
    this->actualDictionary[key] = value;
}

template <typename K, typename V>
void STLHashTable<K,V>::update(K key, V value) {
    if (!this->contains(key)) {
        throw runtime_error("STLHashTable::update: key not present");
    }
    this->actualDictionary[key] = value;
}

template <typename K, typename V>
V STLHashTable<K,V>::get(K key) {
    if (!this->contains(key)) {
        throw runtime_error("STLHashTable::get: key not present");
    }
    return this->actualDictionary[key];
}

template <typename K, typename V>
bool STLHashTable<K,V>::contains(K key) {
    try {
        this->actualDictionary.at(key); // check to see if the key exists
        return true;
    } catch (std::out_of_range& e) {
        return false;
    }
}

template <typename K, typename V>
void STLHashTable<K,V>::remove(K key) {
    if (!this->contains(key)) {
        throw runtime_error("STLHashTable::remove: key not present");
    }
    this->actualDictionary.erase(key);
}

template <typename K, typename V>
std::vector<K> STLHashTable<K,V>::getKeys() {
    vector<K> vec;
    for (auto it = actualDictionary.begin();
            it != actualDictionary.end();
            it++) {
        vec.push_back(it->first);
    }
    return vec;
}

template <typename K, typename V>
std::vector<pair<K,V>> STLHashTable<K,V>::getItems() {
    vector<pair<K,V>> vec;
    for (auto it = actualDictionary.begin();
            it != actualDictionary.end();
            it++) {
        vec.push_back(pair<K,V>(it->first, it->second));
    }
    return vec;
}