所以我对 C++ 还很陌生,我对如何在存储 pair
项的集合上实现 find()
函数有些困惑.我阅读了如何按对插入和删除项目,但对解释如何使用 find
(或其他方法,如果有的话)的任何人都感到厌烦通过第一个项目找到一个值对。
set<pair<string, CustomObject>> *items = new set<pair<string, CustomObject>>();
然后假设我在集合中插入了几对,然后我想通过搜索存储为该对中第一项的“ key ”来找到其中一对。我认为这将涉及调用 .first
对,但我只是遇到了麻烦。这是我要实现的基本功能
bool inSet(string key){
return this->items->find(pair<string, CustomObject>(key, null).first)
}
我能够在 map 对象中很好地实现所有内容,但后来我不得不切换到集合,因为我希望能够对数据结构中的项目进行排序,但有人告诉我你不能在映射,因此集合。
最佳答案
std::set
根据整个 值存储和搜索值。因此,当您为 pair(key, null)
执行 find
并且该集合包含 pair(key, somevalue)
时,它不会找到它,因为它们不一样。
如果你只想通过键来搜索,你需要一个std::map
。正如您所说,这不会按值进行任何搜索或排序,因此您只能有一个具有给定 key
的条目。
如果您只想通过键和键、值对(在同一数据结构的生命周期的不同点进行不同的搜索)进行搜索/排序,那么您将需要更复杂的安排。
一个 map
的 set
可以做你想做的事:
std::map<string, std::set<CustomObject>> items;
现在,当您只想按键查找内容时,您只需在 map 中查找,返回一组包含该键的所有值。如果您想进一步搜索特定值,可以在该集合中查找它。
关于c++ - 通过成对存储的 key 在 std::set 中查找 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35818787/