sort() i vector<mojaklasa>

0

posiadam klase:

 class polaczenie{
      public:
             int pierwszy;
             int drugi;
             int cena;
             polaczenie(int p, int d, int c){
                            pierwszy=p;
                            drugi=d;
                            cena=c;
                            }
             polaczenie(){}
             bool operator< (polaczenie jakies){
                        return (pierwszy<jakies.pierwszy);
                       };
      };

oraz vector:

vector<polaczenie> wyniki 

uzywam

sort(wyniki.begin(),wyniki.end()); 

i nie mam zieloneog pojecia czemu nie dziala, znalazlem w internecie ze przy przeciazeniu operatora < dla mojej klasy powinno smigac, co robie nie tak??

0

bool operator< (const polaczenie& jakies)

0

nie dziala w dalszym ciagu (programuje w dev cpp) i zamiast odpalic program otwiera mi jakis plik stl_algo.h i tam cos nie tak

0

operator< chyba musi mieć 2 parametry. I zmień środowisko.

0

z tego co mi wiadomo jezeli ten operator przeciazam dla klasy i jest definiowany wewnatrz klasy to jest tylko jeden argument, bo pierwszy jest domysllny i jest wlasnie obiektem tej klasy

0

Pokazałeś za mało kodu. Pokaż jak wypełniasz ten wektor. Z tego co na razie pokazałeś to wszystko jest ok. No może lepiej by było gdyby operator wyglądał trochę inaczej:

bool operator<(const polaczenie &jakies) const {...}
0

heh kodu jest sporo bo robie algorytm prima, wiec elementy tej klasy przechodza jeszcze przez kopiec a dopiero potem do tego vectora, nie wiem czy cie dobrze zrozumialem ale umieszczam je funkcja push_back()

0

Ja bym nie przeciążał operatora a dał funktor porównujący skoro wszystkie składowe są publiczne.

0

ohoho7, poczytaj o priority_queue, w algorytmie prima aż się prosi. moje rozwiązanie ze spoja http://pl.spoj.pl/problems/SPIN_PL/:

#include <cstdio>
#include <map>
#include <vector>
#include <list>
#include <queue>

using namespace std;

typedef pair<int,int> PII;

struct Node
{
  Node() { visited=false; }
  list<PII> conns;
  bool visited;
};

typedef vector<Node> Nodes;


bool comp(const PII& a, const PII& b)
{
  return a.first>b.first;
}

typedef priority_queue<PII,vector<PII>,bool (*)(const PII&, const PII&)> Supernode;

int wynik(Supernode& sn, Nodes& nodes)
{
  while (!sn.empty() && nodes[sn.top().second].visited)
    sn.pop();
  if (sn.empty())
    return 0;
  Node& n = nodes[sn.top().second];
  n.visited = true;
  int w = sn.top().first;
  while (!n.conns.empty())
    {
      if (!nodes[n.conns.front().second].visited)
        sn.push(n.conns.front());
      n.conns.pop_front();
    }
  return w+wynik(sn,nodes);
}

int main()
{
  int t;
  scanf("%d",&t);
  while(t--)
    {
      getchar();
      int n,m;
      scanf("n=%d,m=%d",&n,&m);
      Nodes w(n,Node());
      for(int i=0;i<m;++i)
        {
          getchar();
          int a,b,c;
          scanf("{%d,%d}%d",&a,&b,&c);
          w[a].conns.push_back(make_pair(c,b));
          w[b].conns.push_back(make_pair(c,a));
          //printf("%d <--> %d (%d)\n",);
        }
      getchar();
      Supernode supernode(comp);
      supernode.push(make_pair(0,0));
      printf("%d\n",wynik(supernode,w));
    }
  return 0;
}

pewnie da się to szybciej i ładniej zrobić
(w tym zadaniu z tego co pamiętam wejście było dość pojebanie skonstruowane, stąd te getchary)

0

wlasnie chce stworzyc kolejke priorytetowa tylko musze sam ja zaimplementowac i to przy uzyciu kopca, ale chwilowo nie wazne znowu ten sam problem zamieszczam caly bardzo krotki kod prosze o wskazanie bledu bo nie chce sie kompilowac

 
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

class czlowiek{
      public:
             int pesel;
             string imie;
             string nazwisko;
             czlowiek(int p, string i, string n){
                          pesel=p;  imie=i;   nazwisko=n;
                          }
             
             bool operator<(czlowiek s){
                                return (this->pesel < s.pesel);
                                }
      
      
      };


main(){
vector<czlowiek>  pieciu;
pieciu.push_back(czlowiek(12,"pawel","o"));
pieciu.push_back(czlowiek(2,"kasia","m"));
sort(pieciu.begin(),pieciu.end());

       
system("pause");       
return 0;
}

0

Błąd wskazuje kompilator, nie trzeba do tego forum:

ideone napisał(a)

prog.cpp warning: ISO C++ forbids declaration of ‘main’ with no type
prog.cpp: In function ‘int main()’:
prog.cpp warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h: In function ‘const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&) [with _Tp = czlowiek]’:
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h instantiated from ‘void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<czlowiek*, std::vector<czlowiek, std::allocator<czlowiek> > >, _Size = int]’
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h instantiated from ‘void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<czlowiek*, std::vector<czlowiek, std::allocator<czlowiek> > >]’
prog.cpp instantiated from here
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h error: passing ‘const czlowiek’ as ‘this’ argument of ‘bool czlowiek::operator<(czlowiek)’ discards qualifiers
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h error: passing ‘const czlowiek’ as ‘this’ argument of ‘bool czlowiek::operator<(czlowiek)’ discards qualifiers
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h error: passing ‘const czlowiek’ as ‘this’ argument of ‘bool czlowiek::operator<(czlowiek)’ discards qualifiers
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h💯 error: passing ‘const czlowiek’ as ‘this’ argument of ‘bool czlowiek::operator<(czlowiek)’ discards qualifiers
/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/bits/stl_algo.h error: passing ‘const czlowiek’ as ‘this’ argument of ‘bool czlowiek::operator<(czlowiek)’ discards qualifiers

0

acha, fajnie mi to nic nie mówi a co do main without type to dev cpp sobie z tym radzi, jak i wiele innych kompilatorów, sorry ale jesli moglbys powiedziec co jest zle bylbym wdzieczny, bo w dalszym ciagu nie weim

0

chyba nie potrzebny jest wskaznik this-> (tak sadze), przeciazylem operator poza klasa z dwoma argumentami i dziala, dziekuje za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1