2011-12-16 7 views
0

私は以下のプログラムで間違っていますか?C++ std :: vectorなどでメンバーシップをチェックするにはどうすればよいですか?

コンテナにstd::find()を使用して、特定の要素が含まれているかどうかを判断します。以下のプログラムは空のコンテナで動作しますが、要素を持つコンテナでは動作しません。

#include <iostream> 
#include <vector> 
#include <cassert> 

struct Pair {int x,y;}; 

const bool operator==(Pair p, Pair q) {return p.x == p.x && q.y == q.y ;} 

typedef std::vector<Pair> p_containr_t; 

int main (int argc, char * const argv[]) { 
    const Pair start_p = {1,2}; 
    const Pair second_p = {3,4}; 
    const Pair other_p = {5,6}; 
    p_containr_t v; 
    p_containr_t::iterator where; 

    where = std::find(v.begin(),v.end(),other_p); 
    assert(where == v.end()); 
    std::cout << "OK for empty\n";      // Program reaches here. 

    v.push_back(start_p); 
    where = std::find(v.begin(),v.end(),other_p); 
    assert(where == v.end());       // This assertion fails. 
    std::cout << "OK for first element\n"; 

    v.push_back(second_p); 
    where = std::find(v.begin(),v.end(),other_p); 
    std::cout << "OK for second element\n";  // Fails too (if I edit above). 

    return 0; 
} 
+0

私は質問を削除すると思っています。答えは素晴らしいです。私たちがペアプログラミングをしていたのであれば私は間違いを犯したとは思わない。質問は他の人に助けになるのでしょうか? –

答えて

2

この条件は常に真です:

const bool operator==(Pair p, Pair q) {return p.x == p.x && q.y == q.y ;} 
6
const bool operator==(Pair p, Pair q) {return p.x == p.x && q.y == q.y ;} 

その行をよく見ます。

+1

これは最も厄介な種類のエラーです:P – GWW

+1

'-Wunused'はあなたにこの時間を節約しません! :) – bdonlan

+0

笑!イヤホンの間に短い... –

関連する問題