Я делаю программу, которая представляет собой вектор списков. Он отслеживает слово и номер строки, на которой было найдено слово.
пример:
teddy bears are cute
so are you
поэтому он будет хранить teddy, так как строка 1. несет в себе строку 1. Единственная проблема, с которой я сталкиваюсь, - это когда слово повторяется. он будет хранить строки 1, но я хочу, чтобы программа также сохранялась как строка 2. Я не уверен, как я могу это сделать. Здесь код, который у меня есть
class index_table
{
public:
index_table() { table.resize(128);}
vector <int> &find1(string &);
private:
class entry
{
public:
string word;
vector <int> line;
};
vector< list <entry> > table;
};
void index_table :: insert( string & key, int value)
{
entry obj;
int c = key[0]; //vector for the table.
obj.word = key; //Storing word
obj.line.push_back(value); //Storing what line it was found on
table[c].push_back(obj); //Stores the word and line number.
}
Как я могу сделать это так, чтобы моя программа могла хранить несколько слов на разных числовых строках? Мне придется искать через мой стол [c], чтобы слово было таким же? Как я могу сделать это правильно?
Это не решение проблемы, но я отвечаю на ваш комментарий
"Я никогда раньше не использовал карту, поэтому я не совсем уверен, как ее реализовать..."
#include<iostream>
#include<fstream>
#include<sstream>
#include<map>
#include<set>
int main()
{
std::map< std::string, std::set<int> > word_count;
std::ifstream input_file("input.txt");
std::string single_line, single_word;
int line_number = 0;
while(std::getline(input_file, single_line))
{
++line_number;
std::stringstream word_reader(single_line);
while(word_reader >> single_word)
{
word_count[single_word].insert(line_number);
}
}
input_file.close();
for(auto word:word_count)
{
std::cout << word.first << ":";
for(auto line:word.second)
{
std::cout << line << " ";
}
std::cout << std::endl;
}
}
Содержимое Input.txt
:
teddy bears are cute
so are you
Выходы:
are:1 2
bears:1
cute:1
so:2
teddy:1
you:2