How to create map/unordered_map that will use
const char* as key directly?
If I use
map<std::string,..>, then on each resolving
map["abc"] = ... a new
std::string object will be created. That causes a big overhead for allocating memory, creating a string object and copying the string into it.
How do I declare a map object that uses
const char* directly without any overhead?
You can use a
std::map<std::string_view, int> Map; Map["abc"] = 1; // no allocation necessary to store "abc"
It is basically a wrapper around string objects. And it's a view, which means that it doesn't own the string and thus doesn't copy and allocate memory to store a string.
Note that for small strings (and also literals),
std::string doesn't allocate too due to SSO and so the overhead is minimal. Always measure before optimizing.