2016-04-20 10 views
3

セットCでペアを見つけます。私は1つの値を持つセットのための 'find'を使うことができますが、ペアのためにそれを行うことはできません。私はint型のペアを含むセットを持っている場合は、</p> <pre><code>set<pair<int,int> > cells; </code></pre> <p>は、どのように私は「検索」を使用して設定でペアを抜けるかどうかを見つけることができ++

私は

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)))))'| 

、同様にしようとしていますが、誰もが任意のアイデアを持っていますか?ありがとう!

答えて

2

問題は、あなたのセットだけではなく、<int,int>の、整数std::pair<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

itに使用するタイプについて誤植があるようです。

std::set<std::pair<int,int>>::iterator it; 
+0

あなたは正しいです。私はそれを知らなかった。ありがとう@R Sahu –

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

関連する問題

 関連する問題