gpt4 book ai didi

c++ - 将唯一元素从 std::vector 插入到 std::set

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

我有一个名为 Point 的类,用于存储 x 和 y double 值。我有一个包含重复值的 Pointstd::vector。我正在尝试计算此 vector 中唯一项目的数量。

我认为因为 std::set 只有独特的对象,从 vector 创建一个 set 会给我独特的值(value)。但我没有得到正确的结果。我已经重载了相等运算符。但是重复的值仍然被插入到 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 );
}

ma​​in.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;
}

最佳答案

你所有的元素都是不同的,因为你:

1) 使用指针,因此您必须传递一个自定义比较器,该比较器将指针与 Point 进行比较考虑到它们指向的内容。

2) 假设std::set使用 operator ==operator !=实际上它使用 operator < .

我会收集 Point而不是 Point* .你有什么理由使用指针而不是对象吗?如果没有,则使用对象。

关于c++ - 将唯一元素从 std::vector 插入到 std::set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14052806/

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