Я впервые задаю вопрос о переполнении стека.
В названии я хочу сделать простой словарь.
Вот мой код C ++:
class Dict
{
public:
Dict(string key, int value);
~Dict();
void append(string key, int value);
int operator[](string search);
//int operator=(int value);
private:
string* keys;
int have_keys;
int* values;
};
Методы:
Dict::Dict(string key, int value)
{
keys = new string[1];
keys[0] = key;
have_keys = 1;
values = new int[1];
values[0] = value;
}
//append a key an a value
void Dict::append(string key, int value)
{
string* temp_keys = new string[have_keys+1];
memcpy(temp_keys, keys, sizeof(string)*have_keys);
temp_keys[have_keys] = key;
int* temp_values = new int[have_keys+1];
memcpy(temp_values, values, sizeof(int)*have_keys);
temp_values[have_keys] = value;
have_keys++;
keys = new string[have_keys];
memcpy(keys, temp_keys, sizeof(string)*have_keys);
delete[]temp_keys;
values = new int[have_keys];
memcpy(values, temp_values, sizeof(int)*have_keys);
delete[]temp_values;
}
//a = dict["hello"];
int Dict::operator[](string search)
{
for(int i = 0;i<have_keys;i++){
if(keys[i]==search){
return values[i];
}
}
}
Я мог бы сделать это:
Dict dict = Dict("hello", 10);
int a = dict["hello"];
show(a);
Однако, для ...
dict["hello"]=20;
Как я могу перегрузить операторы, чтобы сделать это?
Я не хочу этого: dict.set ("привет", 20);
Спасибо!