summaryrefslogtreecommitdiffstats
path: root/02-data_structures/03-hash_tables/01-phone_book/phone_book.cpp
diff options
context:
space:
mode:
Diffstat (limited to '02-data_structures/03-hash_tables/01-phone_book/phone_book.cpp')
-rw-r--r--02-data_structures/03-hash_tables/01-phone_book/phone_book.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/02-data_structures/03-hash_tables/01-phone_book/phone_book.cpp b/02-data_structures/03-hash_tables/01-phone_book/phone_book.cpp
new file mode 100644
index 0000000..182c36f
--- /dev/null
+++ b/02-data_structures/03-hash_tables/01-phone_book/phone_book.cpp
@@ -0,0 +1,72 @@
+#include <iostream>
+#include <vector>
+#include <string>
+
+using std::string;
+using std::vector;
+using std::cin;
+
+struct Query {
+ string type, name;
+ int number;
+};
+
+vector<Query> read_queries() {
+ int n;
+ cin >> n;
+ vector<Query> queries(n);
+ for (int i = 0; i < n; ++i) {
+ cin >> queries[i].type;
+ if (queries[i].type == "add")
+ cin >> queries[i].number >> queries[i].name;
+ else
+ cin >> queries[i].number;
+ }
+ return queries;
+}
+
+void write_responses(const vector<string>& result) {
+ for (size_t i = 0; i < result.size(); ++i)
+ std::cout << result[i] << "\n";
+}
+
+vector<string> process_queries(const vector<Query>& queries) {
+ vector<string> result;
+ // Keep list of all existing (i.e. not deleted yet) contacts.
+ vector<Query> contacts;
+ for (size_t i = 0; i < queries.size(); ++i)
+ if (queries[i].type == "add") {
+ bool was_founded = false;
+ // if we already have contact with such number,
+ // we should rewrite contact's name
+ for (size_t j = 0; j < contacts.size(); ++j)
+ if (contacts[j].number == queries[i].number) {
+ contacts[j].name = queries[i].name;
+ was_founded = true;
+ break;
+ }
+ // otherwise, just add it
+ if (!was_founded)
+ contacts.push_back(queries[i]);
+ } else if (queries[i].type == "del") {
+ for (size_t j = 0; j < contacts.size(); ++j)
+ if (contacts[j].number == queries[i].number) {
+ contacts.erase(contacts.begin() + j);
+ break;
+ }
+ } else {
+ string response = "not found";
+ for (size_t j = 0; j < contacts.size(); ++j)
+ if (contacts[j].number == queries[i].number) {
+ response = contacts[j].name;
+ break;
+ }
+ result.push_back(response);
+ }
+ return result;
+}
+
+int main() {
+ write_responses(process_queries(read_queries()));
+ return 0;
+}