按用户定义的数据类型优化搜索

时间:2013-11-15 23:36:34

标签: c++

假设我有以下代码:

class ID {
    ID (const std::string& name_, int n_) : name (name_), n(n_) {}
    std::string name;
    int n;
}

T* search_by_ID (const ID& id_);

每当我想调用search_by_ID时,我需要构造一个临时ID对象(如果一个合适的对象尚未构造和可用),例如:

ptr=search_by_ID (ID (myname, number));

即使对象是在适当的位置构造的,它也涉及到字符串副本,这可能很慢。因此,定义新函数(或重载)似乎很方便:

T* search_by_ID (const std::string name, int number);

现在我可以执行搜索并且不会创建任何字符串副本。缺点是我必须重载search_by_ID并且代码可能不那么容易或理解或清楚。

是否可以采用两种方法中的最佳方法?即阻止第一次调用创建字符串(myname)的副本。

1 个答案:

答案 0 :(得分:0)

如果你多次调用该函数,并且总是使用相同的类,那么最好稍微更改一下类,而不是在里面存储std::string,存储一个指针< / strong>到std::string。这样,在使用构造函数时,您不必一直复制字符串。

如果您计划使用不同的课程,您可能会发现最好使用模板,并从您的功能中制作模板:

template <class myType>
T* search(myType &object);

当然,您也可以将两种解决方案结合起来。