Ik heb een vector met pointers naar Word's (één of ander object), en daarbij hoort een vector met integers. Ik wil de vector met integers sorteren a.d.h.v. de woorden in de eerste vector. In andere woorden, hij moet de integers zo sorteren dat de daarbij behorende woorden op alfabetische volgorde staan. Ik heb nu dit:
Hierin heeft indices dus type vector<int> en words type vector<Word*>. De operator < heb ik overgeload voor het Word object, zodat deze woorden vergelijkt (welke komt eerder in het alfabet).
Het bovenstaande zou volgens mij prima werken als words een vector<Word> was geweest, maar aangezien ik een vector<Word*> heb, worden nu de pointers met elkaar vergeleken in plaats van de woorden. De vergelijking veranderen in
mag niet, en de < operator overloaden voor Word-pointers mag ook niet.
Hoe los ik dit nu het handigst op
C++:
1
2
3
4
5
6
7
8
9
10
11
| template<class T> struct index_cmp { index_cmp(const T arr) : arr(arr) {} bool operator() (const size_t a, const size_t b) const { return arr[a] < arr[b]; } const T arr; }; // ... sort(indices.begin(), indices.end(), index_cmp<vector<Word*>&>(words)); |
Hierin heeft indices dus type vector<int> en words type vector<Word*>. De operator < heb ik overgeload voor het Word object, zodat deze woorden vergelijkt (welke komt eerder in het alfabet).
Het bovenstaande zou volgens mij prima werken als words een vector<Word> was geweest, maar aangezien ik een vector<Word*> heb, worden nu de pointers met elkaar vergeleken in plaats van de woorden. De vergelijking veranderen in
C++:
1
| return *(arr[a]) < *(arr[b]); |
mag niet, en de < operator overloaden voor Word-pointers mag ook niet.
Hoe los ik dit nu het handigst op