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

Sortowanie vectora

VPS Starter Arubacloud
0 głosów
1,858 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ź 165 wizyt
pytanie zadane 26 marca 2021 w Java przez Hubert731 Obywatel (1,650 p.)
+1 głos
1 odpowiedź 493 wizyt
pytanie zadane 12 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)
0 głosów
1 odpowiedź 766 wizyt
pytanie zadane 2 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...