1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
   | int get(int key) { 	auto it = vis.find(key); 	if (it == vis.end()) { 		return -1; 	} 	else { 		pair<int, int>tmp = *vis[key]; 		arr.erase(vis[key]); 		arr.push_front(tmp);
  		vis.erase(key); 		vis[key] = arr.begin(); 		return tmp.second; 	} } void set(int key, int value) { 	auto it = vis.find(key); 	if (it == vis.end()) { 		if (arr.size() == size) { 			pair<int, int>tmp = arr.back(); 			arr.pop_back(); 			arr.push_front({ key,value });
  			vis.erase(tmp.first); 			vis[key] = arr.begin(); 		} 		else { 			arr.push_front({ key,value }); 			vis[key] = arr.begin(); 		} 	} 	else { 		arr.erase(vis[key]); 		arr.push_front({ key,value });
  		vis[key] = arr.begin(); 	}
  }
  |