Я пытаюсь построить относительно сложную структуру данных (для меня). Моя цель - читать слова из текстовых документов и индексировать слова и некоторые конкретные свойства в хеш-таблицу. Таблица построена из вектора векторов структур: (vector vecName;). С этим мне повезло. Каждое уникальное слово хэшируется в местоположение индекса в векторе. Во втором измерении вектора (вектора структур) хранится информация о читаемом файле и о том, где находится слово в файле. Для каждого файла, который я читаю, если я нахожу определенное слово несколько раз, счетчик увеличивается в структуре, а вектор структур с целыми числами хранит информацию обо всех местах, в которых слово хранится в файле.
У меня есть две вещи, с которыми я хотел бы получить помощь:
- Мне любопытно, если у кого-нибудь есть предложения по лучшей реализации структуры данных, чем мое предложение. Может ли класс, который содержит несколько независимых членов данных вместо этого бегемота, быть более полезным?
- Похоже, что у меня либо синтаксическая ошибка, которая вызывает ошибку компиляции, либо я просто пытаюсь создать структуру, которую не поддерживает векторный класс.
Вот ошибки cmpilation. Все три ошибки относятся к вектору структур внутри структуры:
'class std :: vector>' не имеет члена с именем 'theLoc'
'class std :: vector>' не имеет члена с именем 'theStart'
В классе std :: vector> нет члена с именем theEnd
Если я настрою код, как предлагает EboMike, исходные ошибки исчезнут, но я получу:
Я получаю другую ошибку, которую не могу опубликовать, потому что редактор думает, что я публикую гиперссылки. Сводка такова: * 'Запрос на член' push_back 'в' testProps.wordProps :: theWordLoc: theLoc, который имеет неклассовый тип 'int' *
Вот мой код и ссылка на диаграмму (из моего блога) того, как я вижу структуру данных:
http://iamkevinfrye.com/blog/wp-content/uploads/2010/10/MicroSearch-Hash-Table-Data-Structure-Diagram.png
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
using namespace std;
struct wordLoc
{
int theLoc; // the location of the word in theFile
int theStart; // the beginning of the sentence
int theEnd; // the end of the sentence
};
struct wordProps // stores word info to be placed in array
{
string theFile; // stores the file where theWord is found
int theCount; // increments with each occurence of theWord
vector <wordLoc> theWordLoc; // stores the wordLoc info for each occurence of theWord
};
int main()
{
int Tsize = 20000;
wordProps testProps;
testProps.theFile = "test1";
testProps.theCount = 1;
testProps.theWordLoc.theLoc.push_back(200);
testProps.theWordLoc.theStart.push_back(1);
testProps.theWordLoc.theEnd.push_back(15);
vector < vector <wordProps> > theWordProps;
theWordProps.resize(Tsize);
theWordProps[0].push_back(testProps);
cout << "index[0] = " << theWordProps[0].front().theFile << endl;
cout << "index[0] = " << theWordProps[0].front().theCount << endl;
cout << "index[0] = " << theWordProps[0].front().theWordLoc[0].theLoc << endl;
cout << "index[0] = " << theWordProps[0].front().theWordLoc[0].theStart << endl;
cout << "index[0] = " << theWordProps[0].front().theWordLoc[0].theEnd << endl;
cout << "size of theWordProps[0] = " << theWordProps[0].size();
cout << endl;
}