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

C++ 按用户定义的数据类型优化搜索,c++,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\u by\u ID时,我需要构造一个临时ID对象(如果尚未构造合适的对象且该对象不可用),例如: 即使对象是在适当的位置构造的,它也涉及一个字

假设我有以下代码:

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\u by\u ID
时,我需要构造一个临时ID对象(如果尚未构造合适的对象且该对象不可用),例如:

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

T* search_by_ID (const std::string name, int number);
现在我可以执行搜索,并且不创建字符串副本。缺点是我必须按ID进行重载
搜索,代码可能不那么容易理解或清晰


这两种方法有可能是最好的吗?也就是说,防止第一次调用创建字符串(myname)的副本。

如果您多次调用该函数,并且始终使用同一个类,最好稍微更改该类,而不是将
std::string
存储在内部,而是存储指向
std::string
指针。这样,您就不必在使用构造函数时一直复制字符串

如果您计划使用不同的类tho,您可能会发现最好使用模板,并利用您的函数制作一个模板:

template <class myType>
T* search(myType &object);
模板
T*搜索(myType&object);

当然,您也可以将这两种解决方案结合使用。

使用
查找\u if
并通过引用传递
name
最好不要使用除预处理之外的所有大写标识符。您是对的。真正的代码略有不同,我只是简化了它(实际名称是NetID)。这是不可能的。有时需要复制ID对象。存储指针将是一片混乱。
template <class myType>
T* search(myType &object);