[英]std::unordered_set::find - construct an instance only for find()
很多时候,我看到我的key
实际上是我的value
。
例如:
struct Elem {
int key;
// ... Other variables ...
}
这使我想使用std :: unordered_set而不是std::unordered_map
,因为我已经将key
存储在value
-无需为std::unordered_map
的.first
( key
)浪费更多的空间。
然后,我开始使用std::unordered_set
实现,并到达需要在std::unordered_set
上执行find()
的地方。
然后我意识到我需要创建一个空壳的 Elem
这样我就能find()
,因为std::unordered_set::find
会得到一个输入Key
template < class Key, // unordered_set::key_type/value_type
class Hash = hash<Key>, // unordered_set::hasher
class Pred = equal_to<Key>, // unordered_set::key_equal
class Alloc = allocator<Key> // unordered_set::allocator_type
> class unordered_set;
有时候建立一个空壳的 Elem
很难/浪费/甚至不可能?
例如,当我的键/值是
c'tor
的类(不仅使用key
构造实例) 问:我想念什么吗?
问:有没有办法做find()
呢? 我的意思是这并不能使我创建一个我不想创建的实例
选择数据结构来保存数据时,您需要考虑用例。
如果要从键查找数据,则应使用map
。 如果您只想在集合中存储唯一值,而无需使用use set
查找它们。
我不明白为什么插入一个元素作为map.emplace_back(elem.key, elem)
vs set.emplace_back(elem)
这么麻烦,如果这意味着在路上您可以将elem作为map.at(key)
或map[key]
与创建一个空的elem
。
此外, std::set
会(大致)在水下进行整个关键的东西。 (来源: C ++中的set vs map有什么区别? )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.