【发布时间】:2018-04-07 16:32:48
【问题描述】:
我有 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 相同的逻辑来散列和比较,但是当它被销毁时不会释放它的缓冲区。
所以,我的问题是:有没有办法让标准类做到这一点,还是我自己编写这个类?
【问题讨论】:
-
这听起来很像
string_view,但它是 AFAIK 的 C++17 功能。 Possibly related. -
对我来说是XY problem。您能描述一下您正在编写/解决的算法/问题吗?
-
实施即可。有什么问题?
-
如果使用
std::string作为map的key类型,可以手动迭代map而不是使用find(),比较每个key使用std::string::compare(),可以取char*+length为被比较的输入字符串
标签: c++ string c++11 unordered-map