所以我使用多重集来解决编程问题
multiset<pair<int,int> > M;
multiset<pair<int,int> >::iterator it,it2;
使用
将值插入其中M.insert(make_pair(temp,ind));
但现在,当我使用find函数时,要找到一个存在的值,比如说
it2=M.find(temp);
如果temp是一个整数,则抛出此错误:
F:\ABC.cpp||In function 'int main()':|
F:\ABC.cpp|42|error: no matching function for call to
'std::multiset<std::pair<int, int> >::find(int&)'|
F:\ABC.cpp|42|note: candidates are:|
我花了好几天试图调试这个,但无济于事!任何人都可以解释为什么会发生这种情况,并为此提出补救措施吗?
P.S。我希望在multiset中只使用一个键值! (感谢@Nabla的建议)
答案 0 :(得分:1)
由于您希望容器按两个值排序,但只搜索第一个容器,因此这是一个建议。
it = M.lower_bound(pair<int,int>(temp, numeric_limits<int>::min()));
这要求你#include <limits>
。它将迭代器返回到等于或高于最小对的最低元素,其中temp
作为第一个元素。然后,您可以遍历该集,直到找到所有以temp
作为第一个元素的对:
while((it != M.end()) && (it->first == temp)) {
// Do something with the found element in it
it++;
}