提问人:Max Paython 提问时间:12/13/2021 最后编辑:Max Paython 更新时间:12/14/2021 访问量:128
将指针存储在 C++ 标准库容器中
Storing pointers inside C++ standard library containers
问:
我正在实施一个项目,在一个需要我创建数亿个对象的环境中。我将这些字符串存储在多个容器中,因此这些对象的计数(复制)成倍增加,这对我的程序来说是一个巨大的瓶颈。std::string
我正试图想出一个解决方案,我的在线研究已经让我走了这么远。基本上,我的想法是,鉴于我构造的字符串是常量的并且不必要地复制,我想分配我自己的 c 型字符串(char 数组),并在容器之间共享这些指针(我需要这些容器,因为查找、插入等具有不同的优势......
我使用的主要容器是 、 、 。对于最后两个,我正在寻找使这些容器与类型兼容的方法。我使用了 stackoverflow 的帮助,为 like 创建了一个自定义哈希函数和一个比较(小于“<”)。std::vector
std::map
std::unordered_set
char*
std::unordered_set
char*
std::map<_,_,less_than>
为了弄清楚我的问题,我将列出它们。
- 在讨论技术问题之前,这是可以实现的,还是标准的用法,还是值得努力的?
- 比较功能工作正常,插入成功。但是,鉴于两个指针可以指向同一个字符串,但就像 和 中的不同键一样,我还需要类似相等运算符重载的东西才能使用 or 之类的方法。例如,如果 和 ,应该能够删除条目(如果存在)条目(假设两个 '位于不同的内存位置内)。
std::ordered_set
std::map
contains
erase
const char* p1 = "beta"
const char* p2 = "beta"
std::map::erase(p1)
p2
std::map
"beta"
- 如果我把自己说清楚,有没有更好的方法?
感谢您抽出时间接受采访。
答: 暂无答案
评论
std::string_view
可能是一种选择......is there a better way?
首先,我们必须知道你的程序到底做了什么来回答这个问题。现在你只是描述了“你的方式”,而没有解释它的作用。