по умолчанию с 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, для хеширования и сравнения, но затем не освобождает свой буфер при его уничтожении.

Итак, мой вопрос: есть ли способ заставить стандартные классы сделать это, или я сам пишу этот класс?

Ответы на вопрос(1)

Ваш ответ на вопрос