在set c ++中找到一对

时间:2016-04-20 06:12:54

标签: c++ iterator find set

如果我有一个包含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)))))'|

有没有人有任何想法?谢谢!

3 个答案:

答案 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));

Live Demo