c++ - 通过成对存储的 key 在 std::set 中查找 key

标签 c++ sorting dictionary set

所以我对 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 的条目。

如果您只想通过键和键、值对(在同一数据结构的生命周期的不同点进行不同的搜索)进行搜索/排序,那么您将需要更复杂的安排。

一个 mapset 可以做你想做的事:

std::map<string, std::set<CustomObject>> items;

现在,当您只想按键查找内容时,您只需在 map 中查找,返回一组包含该键的所有值。如果您想进一步搜索特定值,可以在该集合中查找它。

关于c++ - 通过成对存储的 key 在 std::set 中查找 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35818787/

相关文章:

sorting - 如何对字符串列表中的数字进行排序?

python - 如何从列表列表创建字典键?

c++ - 建议 : asynchronous, c++ 中的可移植文件 io

mysql - 如何用首字母过滤mysql数据

c++ - 使 QPushButton 不可见但仍然有效?

C++ 将 vector<string> 的排序内容写入文件

c# - 如何从字典中获取第 n 个元素?

c# - IDictionary<TKey, TValue> 的 LINQ?有没有我似乎找不到的 AddIf?

c++ - 如何使用预定设置运行CMake?

c++ - 在 vs2015 中使用 std::functional 的误报错误