gpt4 book ai didi

c++ - 如何为STL容器和算法函数编写重载运算符?

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:38 24 4
gpt4 key购买 nike

例如,我想为 set_difference 编写重载函数比较类型 std::set<point>

class myIter : public std::iterator<std::input_iterator_tag, int> {
public:
myIter(int n) : num(n){}
myIter(const myIter & n) : num(n.num){}
int & operator *(){return num;}
myIter & operator ++(){++num; return *this;}
bool operator !=(const myIter & n){return n.num != num;}
private:
int num;
};

struct point
{
point(int X, int Y):x(X), y(Y){}
int x;
int y;
}

int main()
{
set <point> myset;
myset.insert(point(1, 1);
myset.insert(point(3, 2);
myset.insert(point(5, 3);

//find the missing elements in set for `point.x` using `set_difference`

std::set<int> missing;

std::set_difference(myIter(myset.begin()->x+1), myIter(myset.rbegin()->x),
myset.begin(), myset.end(), std::insert_iterator<std::set<int>>(missing, missing.begin()));

}

应用 std::set_difference 后在 point.x变量 set<int> missing必须是:

missing[0] {2}
missing[1] {4}

我怎么知道如何为操作编写重载运算符?

最佳答案

首先,std::set<point>要求 point低于可比性。您可以定义 operator<对于 point ,或者提供一个单独的函数对象作为第二个模板参数进行比较 std::set<point,MyCompare> .

一旦您真正将元素放入集合中,就可以使用 set_difference .值得注意的是 set_difference实际上并不需要您使用 std::set对于您的输入 --- 您可以只使用 vector ,从而避免必须提供比较功能。

使用set_difference ,您需要确保 value_type两个迭代器范围的 s 相同,因此您需要另一个迭代器包装器,它只返回 x point 的一部分第二个范围的值。

std::set_difference(myIter(myset.begin()->x+1), myIter(myset.rbegin()->x),
extractXIter(myset.begin()), extractXIter(myset.end()),
std::insert_iterator<std::set<int>>(missing, missing.begin()));

关于c++ - 如何为STL容器和算法函数编写重载运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com