【发布时间】:2019-08-01 06:21:48
【问题描述】:
我想在 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::map::find()不会“搜索整个容器”。如果是这样,它的复杂性将是O(n)。但事实并非如此。就算法而言,std::find_if()使用适当的谓词可以轻松处理地图的std::pair。结论:检查你的假设,并解释真正的问题。不,不是所说的那个,而是那个解决方案涉及以这种方式搜索地图的那个。 -
正如山姆所说,您的问题是基于一些错误的假设。 edit 您的问题最好包含您要解决的实际问题,包括 minimal reproducible example
-
感谢您的 cmets。我添加了一个我正在尝试做的例子。如果不可能或者我使用了错误的容器也没关系,我只是想知道我是否错过了一种方法。
-
如果你想“找到和 b 相加的前两个数字”,那么使用地图是没有意义的。这不是地图的用途。您正在尝试将某些东西用于其他非设计用途。
标签: c++ dictionary search stl binary-search