std :: unordered_set :: find - 仅为find()构造一个实例

时间:2017-12-20 11:43:29

标签: c++ c++11 stl set

很多时候,我看到我的key实际上在value内 例如:

struct Elem {
    int key;
    // ... Other variables ...
}

这使我想要使用std::unordered_set而不是std::unordered_map,因为我已经将key存储在我的value中 - 无需为{{{{}}浪费更多地方1}} std::unordered_map.first)。

然后我开始使用key进行实施,然后前往我需要对std::unordered_set执行find()的地方。
然后我意识到我需要创建一个 empty-shell std::unordered_set,这样我就可以Elem,因为find()获得std::unordered_set::find输入

Key

有时构建 empty-shell 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不浪费?我的意思是,这不会让我创建一个我不想要的实例

  • 对我来说真的很奇怪 - 我已经应该拥有我正在寻找的元素,或者至少是 empty-shell

1 个答案:

答案 0 :(得分:0)

选择数据结构来保存数据时,您需要考虑用例。

如果您想从密钥中查找数据,则应使用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++?