我有一个数据结构问题。我有一个字符串集合,这些字符串在进程的整个生命周期中都会增长。我希望能够在程序中以不同的持续时间传递对这些字符串的引用。我不想将重复项添加到集合中,因此当我传入一个时,我希望返回对现有条目的引用,因此:
const std::string& add_new_entry(const std::string&)
{
// Check if string exists
// Return reference if it does
// Otherwise add to collection
// Return reference to it
}
最天真的实现是一个字符串列表和std::find
每次调用,但我不禁觉得这是非常次优的,特别是因为我正在处理超过 50,000 个字符串。我创建了一个扩展数组容器,因此我可以任意添加元素而无需强制调整大小和移动,并且我使用取消引用比较谓词按字母顺序对它们进行索引std::set
:std::string*
谁能做得更好?15 个字符串比较似乎很多。