如何从特定位置开始搜索地图/多映像
How to search in a map/multimap starting from specific position
我想在 map/multimap 中搜索,但不是全部。相反,我想从特定的位置开始。
在以下示例中,我想找到两个总数 b 。并返回其价值。
multimap<int, int> a;
a.insert(make_pair(2, 0));
a.insert(make_pair(2, 1));
a.insert(make_pair(5, 2));
a.insert(make_pair(8, 3));
int b = 4;
for(auto it = a.begin(); it != a.end(); ++it) {
auto it2 = a.find(b - it->first); //Is there an equivalent that starts from "it+1"?
if(it2 != a.end()) {
cout << it->second << ", " << it2->second << endl;
break;
}
}
输出:
0, 0
所需的输出:
0, 1
是否可以在地图中实现特定位置搜索?
如何在从特定位置开始的地图中搜索
您可以使用std::find
。但这不是理想的,因为与地图查找的对数复杂性相比,它具有线性复杂性。std::map
的接口不支持查找此操作。
如果您需要此类操作,则需要使用其他数据结构。应该通过用父节点指针增强(平衡)搜索树来实现。缺点当然是在修改树结构的操作上增加内存使用和恒定开销。
不是从头到尾。
地图查找不是从范围的"开始"开始。它们从树的根开始。
如果您使用的有序地图(听起来像您是),则已经使用std::find
进行了二进制搜索。此功能返回迭代器类型,因此假设您正在寻找某些键x的值,则考虑以下行:
std::map<char,int> mymap;
mymap['x'] = 24;
std::map<char,int>::iterator itr = mymap.find('x');
std::cout << "x=" << itr->second << std::endl;
您的代码未编译的原因可能是因为您尝试返回一对迭代器,该迭代器并不能完全打印以使所有内容都很好地输出。相反,调用itr->second
允许您检索与所需键关联的值。
相关文章:
- 为什么我在地图中搜索STL时差很大?
- C++以迭代方式搜索混合类型地图
- 我们可以使用地图而不是二叉搜索吗?
- 有序地图字符串搜索与整数搜索之间的时间复杂度
- 在地图中搜索结构元素
- unordered_maps的向量,在地图中搜索太慢
- 如何在地图中搜索一对本身的键
- 如何从特定位置开始搜索地图/多映像
- 我想使用列表中的项目在地图中搜索
- 如何在C 中搜索地图
- 在地图中按矢量搜索键
- 在地图中搜索值时'operator='不匹配
- C - 搜索地图中具有相同值的所有键的最快方法是什么
- 按值搜索地图
- 在插入之前使用 lower_bound 搜索地图的好处.相当于ptr_map?
- 为什么向量和地图搜索比静态比较要慢得多
- 如何使用其中一个键搜索具有多个键的地图
- 可以同时搜索相同成本的值和关键字的地图?象征主义地图
- 使用地图库构建电话目录搜索向量
- 使用多关键字地图进行有效搜索