很多时候,我看到我的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
不浪费?我的意思是,这不会让我创建一个我不想要的实例
答案 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++?)