找不到multiset stl识别的函数

时间:2014-02-16 07:43:53

标签: c++ stl

所以我使用多重集来解决编程问题

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的建议)

1 个答案:

答案 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++;
}