diff options
Diffstat (limited to 'graphs/cpp/address_book/address_book.cc')
| -rw-r--r-- | graphs/cpp/address_book/address_book.cc | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/graphs/cpp/address_book/address_book.cc b/graphs/cpp/address_book/address_book.cc new file mode 100644 index 0000000..92e74cf --- /dev/null +++ b/graphs/cpp/address_book/address_book.cc @@ -0,0 +1,75 @@ +// +// Created by martial.simon on 2/26/25. +// + +#include "address_book.hh" + +#include <iostream> +#include <stdexcept> +bool AddressBook::add(const std::string& full_name, const std::string& email, + const std::string& number) +{ + try + { + ContactDetails details = ContactDetails::makeDetails(number, email); + if (full_name.empty()) + return false; + contact_map_.insert({ full_name, details }); + return true; + } + catch (std::invalid_argument& e) + { + return false; + } +} +std::vector<ContactDetails> AddressBook::find(const std::string& full_name) +{ + std::vector<ContactDetails> res; + for (auto detail = contact_map_.find(full_name); + detail != contact_map_.end() && detail->first == full_name; detail++) + { + res.push_back(detail->second); + } + return res; +} +std::size_t AddressBook::count(const std::string& full_name) +{ + size_t res = 0; + for (auto detail = contact_map_.find(full_name); + detail != contact_map_.end(); detail++) + { + res++; + } + return res; +} +bool AddressBook::remove(const std::string& full_name, std::size_t index) +{ + auto range = contact_map_.equal_range(full_name); + for (auto contact = range.first; contact != range.second; contact++) + { + if (contact->first == full_name) + { + if (index == 0) + { + contact_map_.erase(contact); + return true; + } + index--; + } + } + return false; +} +void AddressBook::remove_all(const std::string& full_name) +{ + auto range = contact_map_.equal_range(full_name); + contact_map_.erase(range.first, range.second); +} +std::ostream& operator<<(std::ostream& os, const AddressBook& b) +{ + os << b.contact_map_.size() << " contact(s) in the address book.\n"; + for (auto& pair : b.contact_map_) + { + os << "- " << pair.first << ": " << pair.second; + } + return os; +}
\ No newline at end of file |
