// commenting everything out when I commit so all commits my code technically // compiles #if 0 #include #include #include #include namespace cs440 { template class Map { private: using ValueType = std::pair; // idx 0 = root // left = parent * 2 + 1 // right = parent * 2 + 2 std::vector store; public: // TODO: Iterator functionality class Iterator { Iterator() = delete; Iterator(Map &parent, const Key_T &key) {} }; class ConstIterator { ConstIterator() = delete; ConstIterator(Map const &parent, const Key_T &key) {} }; class ReverseIterator { ReverseIterator() = delete; ReverseIterator(Map &parent, const Key_T &key) {} }; Map() : store{} {} Map(const Map &rhs) : store{rhs.store} {} Map &operator=(const Map &rhs) { this->store = rhs.store; } Map(std::initializer_list elems) : store{} { this->insert(elems.begin(), elems.end()); } // who cares we're using vector ~Map() {} size_t size() const { return this->store.size(); } bool empty() const { return this->store.empty(); } // TODO: iterator creation Iterator begin() { return Iterator(*this, ); } Iterator end() { return Iterator(*this, ); } ConstIterator begin() const { return ConstIterator(*this, ); } ConstIterator end() const { return this->cbegin(); } ConstIterator cbegin() const { return this->cend(); } ConstIterator cend() const { return ConstIterator(*this, ); } ReverseIterator rbegin() { return Iterator(*this, ); } ReverseIterator rend() { return Iterator(*this, ); } Iterator find(const Key_T &) {} ConstIterator find(const Key_T &) const; Mapped_T &at(const Key_T &key) {} const Mapped_T &at(const Key_T &key) const {} Mapped_T &operator[](const Key_T &) {} std ::pair insert(const ValueType &) {} template void insert(IT_T range_beg, IT_T range_end) { std::for_each(range_beg, range_end, [&](ValueType &val) { this->insert(val); }); } // TODO: erase via iterator void erase(Iterator pos) {} void erase(const Key_T &key) { this->erase(this->find(key)); } void clear() { this->store = {}; } friend bool operator==(const Map &lhs, const Map &rhs) { if (lhs.store.size() != rhs.store.size()) { return false; } auto liter = lhs.cbegin(); auto riter = rhs.cbegin(); // both must be the same length so this is fine while (liter != lhs.cend()) { if (*liter != *riter) { return false; } liter++; riter++; } return true; } friend bool operator!=(const Map &lhs, const Map &rhs) { return !(lhs == rhs); } // TODO < operator friend bool operator<(const Map &lhs, const Map &rhs) {} }; } // namespace cs440 #endif