7K12 blog

猫でも分かる何か

複合コンテナ CompoundContainer

#include <bits/stdc++.h>
using namespace std;

namespace LIB {
	template<class T>class DequeSet {
	public:
		deque<T> d;
		unordered_set<T> s;
		DequeSet() {}
		DequeSet(initializer_list<T> il) { for(auto&e: il) push_back(e); }
		auto back() { return d.back(); }
		auto begin() { return d.begin(); }
		auto end() { return d.end(); }
		void insert(auto i, auto x) { d.insert(i,x),s.insert(x); }
		auto exists(auto x) { return s.find(x)==s.end()?0ll:1ll; }
		auto pop_back() { T t=d.back(); d.pop_back(),s.erase(t); return t; }
		auto pop_front() { T t=d.front(); d.pop_front(),s.erase(t); return t; }
		auto push_back(auto x) { d.push_back(x),s.insert(x); }
		auto push_front(auto x) { d.push_front(x),s.insert(x); }
		auto size() { return d.size(); }
		auto& operator[](auto i) { return d[i]; }
		auto operator[](auto i) const { return d[i]; }
	};
}