У меня есть массив указателей на структуры внутри массива struct и я хочу отсортировать свой «график []» по его буквам.Сортировка массива указателей на структуры внутри структуры
Моя проблема заключалась в сортировке '* vertexes []' внутри 'struct vertex'. Теперь я не могу показать «письмо» в каждом из указателя внутри '* Вершины [] ...
Вот код с PaulMcKenzie исправлениями:
#include <algorithm> //std::sort()
#include <cstdio> //std::scanf(), std::putchar()
//
struct vertex {
vertex *vertexes[26];
vertex **end; //Do the same as 'size'
unsigned int size;
char letter;
void insert(vertex *dest) { vertexes[size] = dest; ++size; /* or *end = dest; end+=1; */ }
bool empty(void) const { return(this->size == 0); /* or return(vertexes == end); */ }
};
//
bool byLetter(const vertex *A, const vertex &B)
{
return(A->letra < B->letra);
}
//
int main(void)
{
unsigned int n(0), N, A, v, V;
char ini, fim;
vertex graph[26]; //Each one represents a letter of the alphabet
std::scanf("%u ", &N);
while(n++ < N) {
for(v = 0; v < 26; ++v) {
graph[v].size = 0;
graph[v].end = graph[v].vertexes;
graph[v].letter = v+'a';
}
std::scanf("%u %u ", &V, &A);
do {
std::scanf("%c %c ", &ini, &fim);
graph[ini-'a'].insert(&graph[fim-'a']);
} while(--A != 0);
for(v = 0; v < V; ++v) {
if(!graph[v].empty()) {
std::sort(graph[v].vertexes, &graph[v].vertexes[graph[v].size], byLetter);
//Not sure why graph[v] + size is more safe then this...
graph[v].show(); //Problem here
}
}
std::putchar('\n');
}
return(0);
}
//
void vertex::show(void)
{
vertex **p(vertexes); //'p' iterates thought vertexes
while(p != end) { //but I can't access the letter in each pointer
std::putchar(*(*p->vertexes->letter)); // problem here
std::putchar(',');
p+=1;
}
}
//
'структура вершина * вершина [26],' Использование 'struct' в этом контексте является признаком того, что вы чтение материала 'C', а не 'C++' материал. В этом контексте в C++ нет необходимости в 'struct'. – PaulMcKenzie
'std :: sort (vertexes & vertexes [size], byLetter)' должен быть 'std :: sort (вершины, вершины + размер, byLetter);', 'vertexes [size]' - это нарушение доступа, ожидающее своего появления! То же самое можно сказать о '& graph [i] .vertexes [graph [i] .tam]' – BeyelerStudios
'* A-> vertexes-> letter' пытается разыменовать указатель' A-> vertexes-> letter', который doesn ' t даже скомпилировать! – BeyelerStudios