如果我有一个包含int对的集合,
set<pair<int,int> > cells;
如何使用“find”查找对中是否退出。我可以使用'find'来设置一个值,但不能用于一对。
我想尝试,
cells.insert(make_pair(1,1));
set<int,int>::iterator it;
it=cells.find(pair<int,int>(1,1));
error: no match for 'operator=' in 'it = cells.std::set<_Key, _Compare, _Alloc>::find<std::pair<int, int>, std::less<std::pair<int, int> >, std::allocator<std::pair<int, int> > >((*(const key_type*)(& std::pair<int, int>((* &1), (* &1)))))'|
有没有人有任何想法?谢谢!
答案 0 :(得分:2)
问题是你的集合是一对整数std::pair<int,int>
的集合,而不仅仅是<int,int>
。更改它会修复您的代码。如果您使用的是c ++ 11或更高版本,则可以使用auto关键字。
// Example program
#include <iostream>
#include <string>
#include <utility>
#include <set>
int main()
{
std::pair<int,int> p1(1,0);
std::pair<int,int> p2(2,1);
std::set<std::pair<int,int>> s;
s.insert(p1);
s.insert(p2);
auto it = s.find(p1);
std::cout << it->first << "," << it->second <<std::endl;
}
答案 1 :(得分:1)
似乎有关于it
使用的类型的拼写错误/误解。你需要使用:
std::set<std::pair<int,int>>::iterator it;
答案 2 :(得分:0)
应该是:
std::set<std::pair<int,int>> cells;
cells.insert(std::make_pair(1,1));
std::set<std::pair<int,int>>::iterator it; // here was the problem
it=cells.find(std::pair<int,int>(1,1));
为了避免这些错误,您可以使用auto
:
std::set<std::pair<int,int>> cells;
cells.insert(std::make_pair(1,1));
auto it =cells.find(std::pair<int,int>(1,1));
如果必须将it
的定义和用法分开:
decltype(cells)::iterator it;
it=cells.find(std::pair<int,int>(1,1));