我有一个名为Point
的类,用于存储x和y double值。我有std::vector
个Point
个包含重复值的内容。我正在尝试计算此向量中唯一项的数量。
我认为,因为std::set
只有唯一的对象,所以从set
创建vector
会给我独特的价值。但我没有得到正确的结果。我重载了相等运算符。但仍然会将重复值插入set
。
目前的结果如下。
10,10 repetitions - 1
10,10 repetitions - 1
20,20 repetitions - 1
20,20 repetitions - 1
我期待......
10,10 repetitions - 2
20,20 repetitions - 2
我错的任何线索?完整的代码如下。
Point.h文件
#ifndef POINT_H
#define POINT_H
class Point
{
public:
Point(double x, double y);
double getX();
double getY();
Point(const Point &other);
bool operator == (const Point& p );
bool operator != (const Point& p );
private:
double _x;
double _y;
};
#endif // POINT_H
Point.cpp文件
#include "point.h"
Point::Point(double x, double y)
{
_x = x;
_y = y;
}
Point::Point(const Point &other)
{
_x = other._x;
_y = other._y;
}
double Point::getX()
{
return _x;
}
double Point::getY()
{
return _y;
}
bool Point::operator == ( const Point& p )
{
return ( (_x == p._x ) && (_y == p._y));
}
bool Point::operator != ( const Point& p )
{
return !((*this) == p );
}
main.cpp文件
#include <iostream>
#include <vector>
#include <set>
#include "Point.h"
using namespace std;
int main()
{
std::vector <Point*> pointsVector;
pointsVector.push_back(new Point(10,10));
pointsVector.push_back(new Point(10,10));
pointsVector.push_back(new Point(20,20));
pointsVector.push_back(new Point(20,20));
std::set<Point*> uniqueSet( pointsVector.begin(), pointsVector.end() );
std::set<Point*>::iterator it;
for (it = uniqueSet.begin(); it != uniqueSet.end(); ++it)
{
Point* f = *it; // Note the "*" here
int result = std::count( pointsVector.begin(), pointsVector.end(), f );
cout << f->getX() << "," << f->getY() << " repetitions - " << result << endl;
}
return 0;
}
答案 0 :(得分:4)
您的所有元素都不同,因为您:
1)使用指针,因此你必须传递一个自定义比较器,它将指向Point
的指针与它们所指向的内容进行比较。
2)假设std::set
使用operator ==
或operator !=
,实际上它使用operator <
。
我会收集Point
而不是Point*
。你有任何理由使用指针代替对象吗?如果没有,那就使用对象。