我有一个类,我把它放在一个unordered_set中。 为此,我编写了自定义哈希生成器和比较器,以便能够在unordered_set中使用类对象。一切正常。这个类的比较器如下所示:
MaxDegreeOfParallelism = 7
所以我在比较对象的名称(字符串)(没什么特别的)。我使用它来使用struct MyClassComparator
{
bool
operator()(const MyClass & obj1, const MyClass & obj2) const
{
if (obj1.getName() == obj2.getName())
return true;
return false;
}
};
函数在集合中查找MyClass对象。
现在的问题是: 是否可以过载此this()运算符,从而产生以下代码
.find
并使用{/ 1}}功能,如
struct MyClassComparator
{
bool
operator()(const MyClass & obj1, const MyClass & obj2) const
{
if (obj1.getName() == obj2.getName())
return true;
return false;
}
bool
operator()(const MyClass & obj1, const std::string & name) const
{
if (obj1.getName() == name)
return true;
return false;
}
};
如果是,那么这样做会带来性能开销。
答案 0 :(得分:2)
std::unordered_set::find
需要const Key& key
参数,因此如果您希望能够使用my_set.find("my_class_name")
,那么MyClass
必须可以const char[]
构建。
这将创建一个临时密钥,用作find
的参数。在这个阶段,我根本不担心表现。这将是一个不成熟的优化。
我建议使用std::string
而不是普通的C字符串:
struct MyClass
{
MyClass(const std::string& s);
};
然后:
using namespace std::string_literals;
my_set.find("my_class_name"s);
另外,作为附注
if (obj1.getName() == obj2.getName())
return true;
return false;
可以用更简单的方式重写(我推荐):
return obj1.getName() == obj2.getName();
答案 1 :(得分:0)
如果您想使用// Import and set up Firebase
import Firebase
FirebaseApp.configure()
// Create a storage reference
let storage = Storage.storage()
let storageRef = storage.reference()
// Refer to a child directory or even a file
let folderRef = storageRef.child("my_folder")
var fileRef = folderRef.child("my_file.txt")
以外的数据类型进行搜索,则需要一张地图,而不是一套。
std::unorderd_set::value_type