オーバーロードされた operator==() を使用してベクター内の要素を見つけようとしています。ただし、type1
次のコードで使用すると、出力は 1 と 0 (見つかりません) になります。Usingtype2
は 1 と 1 の両方を返します。環境は Xubuntu 12.04 と g++ バージョン 4.6.3 です。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<string, int> type1;
struct type2: public type1 {};
#define TYPE type1
bool operator== (const TYPE& lhs, const TYPE& rhs) {
return lhs.first == rhs.first;
}
int main()
{
vector<TYPE> vec;
TYPE v1, v2;
v1.first = "abc"; v1.second = 1; vec.push_back(v1);
v2.first = "abc"; v2.second = 2;
cout << (v1 == v2) << endl;
cout << (find(vec.begin(), vec.end(), v2) != vec.end()) << endl;
}