【发布时间】:2023-02-16 20:51:56
【问题描述】:
我试图为 std::pair<int, int> 重载 operator== ,这样只有该对的第一个元素才重要。然后,我想使用 std::find 来查找 std::vector<std::pair<int, int>> 中的特定元素,使用重载的运算符==。但是,std::find 似乎没有使用我重载的运算符==,尽管它在一个简单的比较语句中工作。
我希望输出以下代码: 1个 1个 1个
但我得到: 1个 1个 0
在 Linux 上运行,gcc 11.3:
#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
using namespace std;
typedef pair<int, int> p_int_t;
bool operator==(const p_int_t& p1, const p_int_t& p2)
{
return p1.first == p2.first;
}
int main()
{
vector<p_int_t> v;
v.push_back({1, 2});
v.push_back({1, 3});
p_int_t p(1, 4);
cout << (v[0] == p) << endl;
cout << (v[1] == p) << endl;
cout << (find(v.begin(), v.end(), p) != v.end()) << endl;
return 0;
}
【问题讨论】:
标签: iterator find std operator-keyword predicate