#include <string>
#include <unordered_map>
#include <chrono>
#include <vector>
#include <algorithm>
#include <iostream>

struct Index {
	std::vector<std::string> collections;
	std::chrono::system_clock::time_point last_query_time;
};

struct Database {
	std::vector<std::string> collection_names;
	std::vector<Index> indexes;
};

using time_point = std::chrono::system_clock::time_point;

std::unordered_map<std::string, time_point> get_last_query_time(const Database& database) {

	std::unordered_map<std::string, time_point> last_query;

	for (auto& c : database.collection_names) {
		last_query[c] = {};
	}
	for (auto& i : database.indexes){
		for (auto& c : i.collections) {
			last_query[c] = std::max(last_query[c], i.last_query_time);
		}
	}
	return last_query;
}

int main() {
	Database database{ {"collection1","collection2","collection3"}, {{{"collection1","collection3"},std::chrono::system_clock::now()}} };

	auto last_query = get_last_query_time(database);

	for (auto& p : last_query) {
		std::cout << p.first << ":" << p.second.time_since_epoch().count() << "\n";
	}


}