С++ для начинающих


         

Определение объекта map и заполнение его элементами - часть 4


                       push_back((*text_locs)[ix]);

будет проще понять, если мы разложим его на составляющие:

// возьмем слово, которое надо обновить

string word = (*text_words) [ix];

// возьмем значение из вектора позиций

vector<location> *ploc = (*word_map) [ word ];

// возьмем позицию - пару координат

loc = (*text_locs)[ix];

// вставим новую позицию

ploc->push_back(loc);

Выражение все еще остается сложным, так как наши векторы представлены указателями. Поэтому вместо употребления оператора взятия индекса:

string word = text_words[ix]; // ошибка

мы вынуждены сначала разыменовать указатель на вектор:

string word = (*text_words) [ix]; // правильно

В конце концов build_word_map() возвращает построенное отображение:

return word_map;

Вот как выглядит вызов этой функции из main():

int main()

{

    // считываем файл и выделяем слова

    vector<string, allocator> *text_file = retrieve_text();

    text_loc *text_locations = separate_words( text_file );

    // обработаем слова

    // ...

    // построим отображение слов на векторы позиций

    map<string,lос*,less<string>,allocator>

         *text_map = build_word_map( text_locatons );

    // ...

}




Содержание  Назад  Вперед