#define I(i,n) for (int i = 0; i < n; ++ i)
// VECTOR
template <typename E>
class Vector
{
E d[1000];
int s;
public:
Vector() { s=0; }
Vector(const E & d2, int s2) : s(s2) { I(i,s2) d[i]=d2[i]; }
int size() { return s; }
void push_back(const E & e) { d[s]=e; ++s; }
void pop_back() { --s; }
E & operator[](int i) { return d[i]; }
const E & operator[](int i) const { return d[i]; }
};
//HASH-TABLE
class NoSuchKeyException {};
template <typename K, typename V>
class Dict
{
K k[1000];
V v[1000];
int s;
int _index(const K & k2) const {
I(i,s) if (k[i]==k2) return i;
return -1;
}
public:
Dict() { s=0; }
int size() { return s; }
void put(const K & k2, const V v2) {
int i = _index(k2);
if (i != -1) v[i] = v2;
else { k[s]=k2; v[s]=v2; ++s; }
}
bool has(const K & k2) {
return _index(k2) != -1;
}
V & get(const K & k2) {
int i = _index(k2);
if (i != -1) return v[i];
throw NoSuchKeyException();
}
const V & get(const K & k2) const {
int i = _index(k2);
if (i != -1) return v[i];
throw NoSuchKeyException();
}
};
// TEST
#include <iostream>
using namespace std;
#include "source.cpp"
int main() {
Vector<double> v;
I(i,10) v.push_back(1+i);
I(i,v.size()) cout << v[i] << endl;
Dict<double, double> d;
I(i,10) d.put(1+i, 20-i);
I(i,v.size()) cout << d.has(i+1) << endl;
}