по умолчанию с GCC 7.3 и / или Clang 6 - я работаю с обоими и помню, что у одного была проблема, но не с какой).
я есть код C ++, который исследует большую строку и соответствует много подстрок. В максимально возможной степени я избегаю конструировать std :: strings, кодируя подстроки следующим образом:
char* buffer, size_t bufferSize
Однако в какой-то момент я хотел бы найти подстроку в одном из них:
std::unordered_map<std::string, Info> stringToInfo = {...
Итак, чтобы сделать это, я иду:
stringToInfo.find(std::string(buffer, bufferSize))
Это создает std :: string с единственной целью поиска.
Я чувствую, что есть оптимизация, которую я мог бы сделать здесь, ... изменив тип ключа unordered_map на какой-то временный ограничитель строк, такой класс, как этот ...
class SubString
{
char* buffer;
size_t bufferSize;
// ...
};
... он выполняет ту же логику, что и std :: string, для хеширования и сравнения, но затем не освобождает свой буфер при его уничтожении.
Итак, мой вопрос: есть ли способ заставить стандартные классы сделать это, или я сам пишу этот класс?