std :: unordered_set :: find - 仅为find()构造一个实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std :: unordered_set :: find - 仅为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
实现并到达我需要在我的find()
上执行std::unordered_set
的地方。
然后我意识到我需要创建一个空壳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
。如果您只想在集合中存储唯一值,而不需要查找它们,请使用set
。
我不明白为什么插入一个元素作为map.emplace_back(elem.key, elem)
vs set.emplace_back(elem)
这么多麻烦如果它意味着你可以查询元素作为map.at(key)
或map[key]
与创建一个空的elem
。
此外,无论如何,std::set
做了整个关键的事情(大致)水下。 (来源:What is the difference between set vs map in C++?)
以上是关于std :: unordered_set :: find - 仅为find()构造一个实例的主要内容,如果未能解决你的问题,请参考以下文章
在 std::unordered_set<const char *> 中找不到转换为 const char * 的 std::string
对于操作计数()。 std::set<void*> 或 std::unordered_set<void*> 哪个更快?
我的班级有一个 toString() 方法,我如何使用它在 std::unordered_set 中进行散列?