std :: unordered_set :: find-仅构造一个实例()
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
'S .first
(key
)的位置。
然后我开始使用std::unordered_set
实施,然后到达我需要在std::unordered_set
上执行find()
的地方。
然后,我意识到我需要创建一个 empty-shell Elem
,这样我就可以 find()
,beacuse std::unordered_set::find
获得了一个 Key
for Input
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
构建实例)
q。我想念什么吗?
q。有没有办法做find()
并不浪费的方法?我的意思是,这不会使我创建一个我不想
- 对我来说真的很奇怪 - 我已经应该拥有我要寻找的元素,或者至少是 empty -shell 。
选择数据结构以保存数据时,您需要考虑使用用例。
如果您想从密钥查找数据,则应使用map
。如果您只想将唯一值存储在集合中,而无需查找它们,请使用set
。
我不明白为什么将元素插入map.emplace_back(elem.key, elem)
vs set.emplace_back(elem)
为什么这意味着您可以在路上,您可以将Elem查询为map.at(key)
或map[key]
与具有创建空的elem
。
此外,std::set
无论如何都会(大致)在水下做整个关键的东西。(来源:C 中的设置与映射之间有什么区别?)
相关文章:
- 如何将模板的实例传递给另一个模板的另一个实例?
- 在类的第一个/最后一个实例存在之前/之后调用一对函数.有没有更好的方法?
- 是否可以为所有子类设置一个实例?
- 如何在C++中将类的实例完全重新分配给同一类的另一个实例(然后删除原始对象)?
- 如何一次创建帧的一个实例
- 无法从派生类型的作用域访问另一个实例的受保护成员
- QT Windows GUI-无需qtSingLeaplication即可如何打开一个实例
- 包含另一个实例的特征实例,该实例持有固定大小的特征对象
- 从模板类的另一个实例创建模板类的实例时省略模板参数
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 对成员变量的引用在向同一向量中添加另一个实例后断开
- std :: unordered_set :: find-仅构造一个实例()
- 是否可以在 std::optional 中放置一个实例,而不检查/破坏前一个实例?
- 从字符串中删除字符的第一个和最后一个实例
- Object 创建另一个实例,而不是修改指向的实例
- 在#define宏中创建一个实例
- C++-为任何lambda创建一个实例化桶
- qnetworkAccessManager一个实例并连接插槽
- C 是否有办法仅返回for循环的最后一个实例
- 为什么我的程序有一个实例,其中"Vector Subscript out of Range"?