假设我用c ++编写了一个类:
class data
{
private:
int a,b,c,d;
public:
data(){
a=b=c=d=0;
}
data(int aa,int bb, int cc, int dd)
{
a=aa,b=bb,c=cc,d=dd;
}
int get_b(){return b;}
int get_a(){return a;}
};
现在我知道想学习如何为这个类编写运算符和迭代器,以便它可以与标准库容器一起使用
赞:set<string> x;
这是可能的。我想将此数据类用作set<data> x;
,并希望使用像set<data>::iterator it;
我已经尝试过谷歌这个程序,但是在任何地方都找不到实际解释程序的示例实现。
答案 0 :(得分:1)
如果您想在std::set
,std::map
,std::unordered_map
,std::unordered_set
中使用它,您需要实施 &#34;弱小于运营商&#34;
bool operator<(const data& other_data) {
return ....;
}
对于std::vector
,std::deque
等其他容器,std :: list数据可以正常使用。
答案 1 :(得分:0)
喜欢:设置x;这个有可能。我想使用这个数据类 如x;并希望使用像set :: iterator it;
这样的迭代器
我相信你想用你的类作为数据来适应标准容器(矢量/集等)。
对于序列容器(矢量)
int main()
{
data d1(1, 2);
data d2(3, 4);
vector<data> vec{d1, d2}; //initialize your container with your "data" type objects.
for(auto iter = vec.begin(), iter != vec.end();iter++)
cout<<*iter; //for this you need to implement "operator<<" in your data class.
return 0;
}
对于关联容器(设置)
int main()
{
data d1(1, 2);
data d2(3, 4);
//you need to impelment "< or >" relational operator in you data class.
set<data> st{d1, d2}; //initialize your container with your "data" type objects.
for(auto iter = vec.begin(), iter != vec.end();iter++)
cout<<*iter; //for this you need to implement "operator<<" in your data class.
return 0;
}
在课程定义中添加此内容。
friend ostream& operator<<(ostream& os, const base& obj)
{
return (os<<obj.memVariable);
}