QVector的结构体数据集去重代码备份
【功能】去除重复的数量
具体代码如下
。
// 定义结构体如下
struct blll{
float a;
float b;
};;
bool cmp(MainWindow::blll b1,MainWindow::blll b2){
return b1.a<b2.a;
}
bool cmp1(MainWindow::blll b1,MainWindow::blll b2){
return (b1.a==b2.a)&&(b1.b==b2.b);
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 去重的具体实现如下
QVector<blll> arr;
for (int i=0;i<10;++i){
blll tpd1;
tpd1.a=1;
tpd1.b=3;
arr.append(tpd1);
}
for (int i=0;i<10;++i){
blll tpd1;
tpd1.a=5;
tpd1.b=3;
arr.append(tpd1);
}
for (int i=0;i<10;++i){
blll tpd1;
tpd1.a=2;
tp1.b=3;
arr.append(tp1);
}
for (int i=0;i<10;++i){
blll tpd1;
tpd1.a=4;
tpd1.b=6;
arr.append(tp1);
}
for (int i=0;i<10;++i){
blll tpd1;
tpd1.a=2;
tpd1.b=3;
arr.append(tpd1);
}
qDebug()<<"原始数据:\n"<<arr.count();
for(int i=0;i<arr.size();i++)
{
qDebug()<<arr[i].a<<arr[i].b;
}
std::sort(arr.begin(),arr.end(),cmp); //去重前需要排序
auto it= std::unique(arr.begin(),arr.end(),cmp1); //去除容器内重复元素
arr.erase(it,arr.end());
// 下面remove方法有些问题。
// for(int i=0;i<arr.size();i++)
// {
//
// for(int j=i+1;j<arr.size();j++)
// {
// if((arr[j].a==arr[i].a)
// &&(arr[j].b==arr[i].b)){
// arr.remove(j);
// i--;
// }
// }
// }
qDebug()<<"排序和去重后数据:"<<arr.count();
for(int i=0;i<arr.size();i++)
{
qDebug()<<arr[i].a<<arr[i].b;
}
}
【运行结果】:
原始数据:
50
1 3
1 3
1 3
1 3
1 3
1 3
1 3
1 3
1 3
1 3
5 3
5 3
5 3
5 3
5 3
5 3
5 3
5 3
5 3
5 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
4 6
4 6
4 6
4 6
4 6
4 6
4 6
4 6
4 6
4 6
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
2 3
排序和去重后数据: 4
1 3
2 3
4 6
5 3