使用std :: string键避免std :: map/std :: unordered_map查找中的临时值

Ale*_*x B 6 c++ stl

请考虑以下代码:

std::map<std::string, int> m1;
auto i = m1.find("foo");

const char* key = ...
auto j = m1.find(key);
Run Code Online (Sandbox Code Playgroud)

这将为每个地图查找创建一个临时的std :: string对象.避免它的规范方法是什么?

Ker*_* SB 3

不要使用指针;相反,直接传递字符串。然后您可以利用参考资料:

void do_something(std::string const & key)
{
    auto it = m.find(key);
    // ....
}
Run Code Online (Sandbox Code Playgroud)

您越多地使用 C++ 的习惯用法,并且不尝试用它编写 C,C++ 通常会变得“更正确”。

  • 尽管这并没有解决`m1.find("foo")`创建临时对象的问题(即使最终无法绕过这个临时对象)。 (2认同)
  • 我无法避免使用指针。我查找来自外部源的 C 字符串值。这仍然意味着我必须为每次查找构建一个字符串。 (2认同)