مرتب سازی vector با حفظ Index - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مرتب سازی vector با حفظ Index

+1 امتیاز

سلام.

فرض کنید یک vector از struct زیر داشته باشیم.

typedef struct circle{
	int x;
	int y;
	int radius;
};
vector<circle> circles;

حالا این vector  را بر حسب radius مرتب کنیم و index ها این دایره هم حفظ بشه.

 

ممنون از دوستان

سوال شده آذر 5, 1392  بوسیله ی toopak (امتیاز 2,458)   16 47 66
دوباره تگ گذاری شد فروردین 20, 1393 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

شما برای اینکار می تونید با استفاده از pair اندیس را تعریف کنید و با استفاده  از تابع sort مربوط به stl و عبارت lamda به راحتی اینکارو انجام بدید به صورت زیر:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stdlib.h>
using namespace std;
typedef struct circle{
	int x;
	int y;
	int radis;
};

vector <pair<circle,int>> points;

int _tmain(int argc, _TCHAR* argv[])
{
	points.resize(10);
	for (size_t i=0;i < points.size();i++)
	{
		circle p;
		p.x = rand() %100;
		p.y = rand() %100;
		points[i] =  make_pair(p,i);
		
		
	}
	sort(points.begin(),points.end(),[](const pair<circle,int> &l,const pair<circle,int> &r){
		return l.first.radius < r.first.radius;
	});

	for (size_t i=0;i < points.size();i++)
	{
		circle p =points[i].first;
		cout << "x:"<< p.x << " y:"<<p.y << " index:"<< points[i].second << endl;
	}
	return 0;
}

 

پاسخ داده شده آذر 6, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد آذر 8, 1392 بوسیله ی BlueBlade
...