• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie vectora

Object Storage Arubacloud
0 głosów
1,874 wizyt
pytanie zadane 13 marca 2017 w C i C++ przez nieoddam Nowicjusz (140 p.)

Mam problem z posortowaniem rosnąco vectora który w moim przypadku nazywa się "okregistycznedox", po użyciu sort(okregistycznedox.begin(), okregistycznedox.end()); Wyrzuca dużo błędów w pliku predefined_ops.h.  Nie mam żadnego pomysłu jak to posortować.

 

#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <algorithm>


using namespace std;

struct okrag{
       int x,y,r;
       okrag(int _x, int _y, int _r){
                 x = _x;
                 y = _y;
                 r = _r;
                 }
       
       };
		

int main()
{
	ifstream plik("punkty.txt");
	
	vector <pair<double,double> > punkt;
	double a,b;
	
	while(plik >> a >> b){
		punkt.push_back(make_pair(a,b));
	}
	
	plik.close();
	
	int x , y , r;
	
	int c[4] = {0,0,0,0};
 	
 	/*for(int i = 0; i < punkt.size(); i++){
 		cout << "("<<punkt[i].first<<","<<punkt[i].second<<")"<<endl;
	 }*/
	 
	for(int i = 0; i < punkt.size(); i++){
		if(punkt[i].first > 0 && punkt[i].second > 0){
			c[0]++;
		}
		else if(punkt[i].first > 0 && punkt[i].second < 0){
			c[1]++;
		}
		else if(punkt[i].first < 0 && punkt[i].second < 0){
			c[2]++;
		}
		else{
			c[3]++;
		}
	}
    
    //cout << c[0] << " " << c[1] << " "<< c[2] << " " <<c[3]<<endl;
    
    
    
    ifstream plik2("okregi.txt");
    
    vector <okrag> okregistycznedox;
    
    
    
    while( plik2 >> x >> y >> r){
           
           if(abs(y) == r)
                     {
                          okregistycznedox.push_back(okrag(x, y, r));
                      }
           
           }
           
    
    sort(okregistycznedox.begin(),okregistycznedox.end());
    
    for(int i = 0; i<okregistycznedox.size(); i++){
            cout << okregistycznedox[i].x << " " <<okregistycznedox[i].y<< " "  <<  okregistycznedox[i].r<<endl;
            
            }

    
    
    getchar();
}

 

2 odpowiedzi

+1 głos
odpowiedź 13 marca 2017 przez Evelek Nałogowiec (28,960 p.)
Pokaż jak twój plik tekstowy wygląda, bo na razie to nie ma co sortować jak się debuguje. A jeśli dobrze widzę, to nic tam nie wrzucasz nawet mimo tego braku pliku tekstowego.

http://i.imgur.com/KqJEVBg.png
komentarz 13 marca 2017 przez nieoddam Nowicjusz (140 p.)
http://textuploader.com/dtjj8

To jest ten plik okregi.txt
komentarz 13 marca 2017 przez Evelek Nałogowiec (28,960 p.)
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <algorithm>

using namespace std;

struct okrag {
	int x, y, r;
	okrag(int _x, int _y, int _r) {
		x = _x;
		y = _y;
		r = _r;
	}

};

bool porownaj(const okrag &a, const okrag &b);

int main()
{
	ifstream plik("punkty.txt");
	vector <pair<double, double> > punkt;
	double a, b;

	while (plik >> a >> b) {
		punkt.push_back(make_pair(a, b));
	}

	plik.close();

	int x, y, r;

	int c[4] = { 0,0,0,0 };

	/*for(int i = 0; i < punkt.size(); i++){
	cout << "("<<punkt[i].first<<","<<punkt[i].second<<")"<<endl;
	}*/

	for (int i = 0; i < punkt.size(); i++) {
		if (punkt[i].first > 0 && punkt[i].second > 0) {
			c[0]++;
		}
		else if (punkt[i].first > 0 && punkt[i].second < 0) {
			c[1]++;
		}
		else if (punkt[i].first < 0 && punkt[i].second < 0) {
			c[2]++;
		}
		else {
			c[3]++;
		}
	}

	//cout << c[0] << " " << c[1] << " "<< c[2] << " " <<c[3]<<endl;

	ifstream plik2("okregi.txt");

	vector <okrag> okregistycznedox;

	while (plik2 >> x >> y >> r) {

		if (abs(y) == r)
		{
			okregistycznedox.push_back(okrag(x, y, r));
		}

	}
	sort(okregistycznedox.begin(), okregistycznedox.end(), porownaj);

	for (int i = 0; i<okregistycznedox.size(); i++) {
		cout << okregistycznedox[i].x << " " << okregistycznedox[i].y << " " << okregistycznedox[i].r << endl;

	}
	getchar();
}

bool porownaj(const okrag &a, const okrag &b)
{
	return a.x < b.x;
}

Trochę sprytu i posortowane według x (patrz funkcja porownaj).

komentarz 13 marca 2017 przez nieoddam Nowicjusz (140 p.)
Dzięki wielkie.
0 głosów
odpowiedź 13 marca 2017 przez niezalogowany

Problem stanowi sortowanie. Do funkcji wrzucasz tablicę struktur - "okregistycznedox". 

Możesz zrobić tak

Podobne pytania

0 głosów
1 odpowiedź 170 wizyt
pytanie zadane 26 marca 2021 w Java przez Hubert731 Obywatel (1,650 p.)
+1 głos
1 odpowiedź 510 wizyt
pytanie zadane 12 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)
0 głosów
1 odpowiedź 811 wizyt
pytanie zadane 2 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...