Сейчас я работаю над проектом, который требует последовательной генерации текстовых ключей.Мне нужно заполнить генератор ключей целым числом, соответствующим определенному ключу, который конструктор преобразует в ключ.
Мой генератор ключей перегружает операторы приращения, так что строка увеличивается напрямую, а не то, что у меня былоранее делал это, увеличивая значение индекса, затем преобразовывая индекс в ключ для каждого ключа, который я хотел сгенерировать.
Моя проблема в том, что у меня есть ограниченный набор символов, который я хочу использовать при генерации ключей,Мне нужно найти символ в ключе, который я хочу увеличить, выяснить, где он находится в моем наборе символов, найти следующий символ в наборе, а затем заменить символ в ключе следующим символом в наборе.
Вот мой код:
// Not the full charset
std::string charset = "abcdefghijklmnopqrstuvwxyz0123456789";
std::string key;
key.push_back(charset[0]);
for(unsigned int place = 0; place < key.length(); place++)
{
if(key[place] == charset[charset.length() - 1])
{
// Overflow, reset char at place
key[place] = charset[0];
if((key.length() - 1) < (place + 1))
{
// Carry, no space, insert char
key.insert(key.begin(), charset[0]);
break;
}
else
{
// Space available, increment next char
continue;
}
}
else
{
// Increment char at place
key[place] = charset[charset.find(key[place]) + 1];
break;
}
}
В профилировании я обнаружил, что операция поиска действительно замедляет работу.Есть ли более быстрый способ сделать это?Я думал о создании связанного списка из набора символов, но прежде чем я сделаю это, я хотел бы получить некоторую информацию об этом.